[英]WCF Windows Service consuming Service embedded in Windows Form
我有一個帶有WCF庫的Windows服務。 在同一台計算機上,我有一個Windows Form應用程序,其中嵌入了WCF服務。 當我嘗試從Windows服務使用Form中的服務時,出現了我的問題。
表單中的WCF服務具有公開的“ basicHttpBinding”端點和“ mexHttpBinding”。 我可以使用“ WCF測試客戶端”在表單中測試服務,而不會出現問題。
在Windows服務中,我可以將Service引用添加到窗體的服務,一切都很好。 但是,當我實際運行Windows Service並嘗試使用Form中的WCF Service時,出現此錯誤:
由於EndpointDispatcher的ContractFilter不匹配,因此無法在接收方處理帶有操作'http://tempuri.org/ IService1 / shutMeDown'的消息。 這可能是由於合同不匹配(發送方和接收方之間的操作不匹配)或發送方和接收方之間的綁定/安全不匹配造成的。 檢查發送方和接收方是否具有相同的合同和相同的綁定(包括安全要求,例如,消息,傳輸,無)。
看到那里的“ IService1”嗎? 我很確定這就是問題所在。 Windows服務本身已配置為承載稱為“ Service1”的服務,如下面在<services>
部分中所見。 因此,看來我的app.config中肯定有問題。
我最好的猜測是,我在app.config中設置<client>
的方式有問題。 出於某種原因,當我嘗試使用Form中的服務時,Windows服務似乎使用了錯誤的地址。 它使用自己的服務地址,而不是表單服務的地址。
這是Windows服務中app.config的相關部分:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IFormControlService" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:8700/FormControlService"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IFormControlService"
contract="Form_ServiceReference.IFormControlService" name="BasicHttpBinding_IFormControlService" />
</client>
<services>
<service name="smMonitor_wcfServiceLibrary.Service1">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8800/smMonitorService/" />
</baseAddresses>
</host>
<endpoint address="" binding="basicHttpBinding" contract="smMonitor_wcfServiceLibrary.IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True" httpsGetEnabled="True" />
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
我的設置是這樣。 我有一台運行Windows服務的計算機。 在同一台計算機上,我有一個寡婦表格。 Windows窗體公開了一個服務,該服務將允許Windows服務與其進行交互。
我的問題如下。 我只定義了傳出的<bindings>
。 我需要做的是確定兩者的傳入和傳出的綁定是這樣的:
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService1" />
<binding name="BasicHttpBinding_IFormControlService" />
</basicHttpBinding>
</bindings>
由於未定義傳出綁定,因此我的Windows服務正在<basicHttpBinding>
查找,僅使用默認值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.