2011-02-15 123 views
5

我試圖在c#mvc web項目中創建一個wcf服務。我添加的類型爲「WCF服務」的新項目,並添加所提供的接口測試方法:在web項目中託管WCF服務

[ServiceContract] 
public interface ITest 
{ 
    [OperationContract] 
    void DoWork(); 

    bool testWorking(); 
} 

和所提供的服務:

public class Test : ITest 
{ 
    public void DoWork() 
    { 
    } 

    public bool testWorking() 
    { 
     return true; 
    } 
} 

然後,我已經走了過來web.config文件,並添加以下到system.ServiceModel標籤:

<services> 
     <service name="Test" behaviorConfiguration="MyServiceTypeBehaviors"> 
     <endpoint address="" binding="wsHttpBinding" contract="ITest"> 
      <identity> 
      <dns value="localhost"/> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="MyServiceTypeBehaviors" > 
      <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

在這一點上,據我瞭解,我應該能夠在瀏覽器中查看這一點,並得到一個測試消息告訴我這是關於我的時間補充了客戶使用這項服務。但實際發生的事情是,我的瀏覽器下載.svc文件!

兩個問題:

1)到底什麼是我做錯了什麼?爲什麼我沒有看到預期的消息?

2)有什麼辦法可以自動啓動WCF測試工具來運行此服務?我能找到的唯一指導方針是從WCF項目開始。

更新:(SVC文件的內容 - 從評論搶下)

<%@ ServiceHost Language="C#" Debug="true" 
    Service="myemployersaddress.com.Test" CodeBehind="Test.svc.cs" %> 
+1

您是否在IIS中託管服務?看起來您沒有爲.svc安裝正確的處理程序。另外請注意,服務的名稱屬性和端點的合同屬性必須包含包含名稱空間的類型名稱 - 但它不是當前問題的根源。 – 2011-02-15 13:05:28

+0

我確實對命名空間感到疑惑 - 因爲它是在同一個項目中託管的,所以他們沒有必要,但是謝謝澄清。我使用Visual Studio提供的默認服務器在IIS中運行此程序......並不完全知道如何安裝正確的處理程序,如果它們不在那裏的話。 – 2011-02-15 13:13:52

+0

SVC文件中的`Service = ...`也應**引用服務**類的完全限定名 - 例如`服務= YourNamespace.Test`。這是你的svc文件中的情況?這裏的服務條目不是任何類型的網址或類似的東西...... – 2011-02-15 13:42:41

回答

1

從你描述你應該罰款,但因爲你不是:

  1. 什麼服務器你在用嗎? IIS,cassini?
  2. 你下載的svc文件的內容是什麼? (在記事本中打開)

要從visual studio中啓動測試工具,請右鍵單擊.svc文件並將其設置爲起始頁,然後按f5。這應該打開測試工具,並允許您檢查您的服務。這應該給你一些問題的線索。

0

這聽起來像是一個網絡服務器配置問題;

  • 是在IIS中標記爲應用程序的應用程序(它是否有cog)? - 它應該是
  • 是配置爲使用正確版本的ASP.NET(即不是1.x)的應用程序
  • 是.NET 3.0還是以上安裝在服務器上?
  • 框架大師web.config包含.svc映射嗎?

再最後,我看到這裏一個小故障,其中安裝在所有不接觸的配置,如果這是不太如何期望找到它;所以如果您手動更改了服務器上的主web.config,則可能需要手動應用3.0更改

例如,在<buildProviders>中,您應該有類似的內容(對於3。0):

<add extension=".svc" type="System.ServiceModel.Activation.ServiceBuildProvider, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 

<httpHandlers>你應該有像(3.0):

<add path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/> 

而且應該有額外的東西主機在<compilation>/<assemblies>,如:

<add assembly="System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"/> 
<add assembly="System.IdentityModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"/> 
<add assembly="System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 
<add assembly="System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
<add assembly="System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 

這只是一個快速掃描 - 可能有其他的,並且確切的值可能會改變每個環境。