我有一個現有的Web服務(ASMX)需要作爲WCF公開。 ASMX必須保持並且最好不改變客戶端。根據this我已經配置如下。服務層由CodeSmith生成,雖然我沒有寫這些服務,但我知道他們很好,因爲他們已經在野外使用了很多年。名稱已經改變,以保護無辜的..咧嘴笑。作爲ASMX和WCF服務
在服務層存在由CodeSmith中產生的XXX.YYY.MyService
類,這是雙飾
[ServiceContract(Namespace = "http://XXX.YYY")]
和
[WebService(Namespace = "http://XXX.YYY", Name = "MyService")]
我也創建一個空的接口XXX.YYY.IMyService
其通過MyService
實現。在這一點上,我可以使用ASMX服務而沒有任何問題。
現在我添加一個.svc文件,其包含了服務層...
<%@ ServiceHost Language="C#" Debug="true" Service="XXX.YYY.MyService" %>
...我配置服務層的web.config與...
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="XXX.YYY.MyService">
<endpoint binding="basicHttpBinding" contract="XXX.YYY.IMyService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
如果我編譯並嘗試在Visual Studio 2010中爲該服務創建服務引用,則我會看到.ASMX和.SVC版本爲MyService
。在「添加服務引用」對話框中展開.svc分支會導致引用空白XML文檔的錯誤。
如果我檢查事件日誌中我得到...
虛擬主機提供商無法處理請求。 發件人信息:System.ServiceModel.ServiceHostingEnvironment + HostingManager/39449526 異常:System.ServiceModel.ServiceActivationException:由於編譯期間出現異常,無法激活服務'/System/MyService.svc'。異常消息是:合同名稱「XXX.YYY.IMyService」無法通過該服務「爲MyService」執行合同的列表中找到.. --->
...但MyService
標爲實現IMyService
...
public partial class MyService : IMyService
我也試圖改變該服務的合同屬性MyService
,而不是接口。這有效,但對於客戶端代碼中斷,因爲任何嘗試創建服務實例都失敗,因爲它現在是一個接口。
我希望這是有道理的。請隨時提出任何額外的問題。我試圖儘可能詳細。
(沒有涉及IIS ..這純粹是在Visual Studio 2010中)。
謝謝。