簡體   English   中英

Windows窗體中嵌入的WCF Windows服務使用服務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM