C# 嵌入在Windows窗体中的WCF Windows服务使用服务

C# 嵌入在Windows窗体中的WCF Windows服务使用服务,c#,wcf,windows-services,C#,Wcf,Windows Services,我有一个带有WCF库的Windows服务。在同一台机器上,我有一个嵌入了WCF服务的Windows窗体应用程序。当我试图从Windows服务使用表单中的服务时,问题就出现了 表单中的WCF服务公开了一个“basicHttpBinding”端点和一个“mexHttpBinding”。我能够用“WCF测试客户端”测试表单中的服务,没有问题 在Windows服务中,我可以将服务引用添加到表单的服务中,一切正常。但是,当我实际运行Windows服务并尝试使用表单中的WCF服务时,我遇到以下错误: 带行动

我有一个带有WCF库的Windows服务。在同一台机器上,我有一个嵌入了WCF服务的Windows窗体应用程序。当我试图从Windows服务使用表单中的服务时,问题就出现了

表单中的WCF服务公开了一个“basicHttpBinding”端点和一个“mexHttpBinding”。我能够用“WCF测试客户端”测试表单中的服务,没有问题

在Windows服务中,我可以将服务引用添加到表单的服务中,一切正常。但是,当我实际运行Windows服务并尝试使用表单中的WCF服务时,我遇到以下错误:

带行动的信息'http://tempuri.org/IService1/shutMeDown' 由于ContractFilter不匹配,无法在接收器上处理 在端点调度器。这可能是因为一份合同 不匹配(发送方和接收方之间的操作不匹配)或 发送方和接收方之间的绑定/安全不匹配。检查 发送方和接收方具有相同的合同和相同的约束力 (包括安全要求,例如消息、传输、无)

看到里面的“IService1”了吗?我很确定这就是问题所在。Windows服务本身被配置为承载一个名为“Service1”的服务,如下面的
部分所示。看来我的app.config中一定出了什么问题

我最好的猜测是,我在app.config中设置
的方式有问题。出于某种原因,当我试图使用表单中的服务时,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>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IService1" />
            <binding name="BasicHttpBinding_IFormControlService" />
        </basicHttpBinding>
    </bindings>


由于未定义传出绑定,我的Windows服务正在查看
,只使用默认绑定。

您的服务可能需要与桌面交互。。哦,我没想过。我假设,由于表单是通过HTTP公开端点的,所以它将可用于Windows服务,但您可能有一点。我会调查的。谢谢