首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >WCF Windows服务消费服务嵌入Windows窗体

WCF Windows服务消费服务嵌入Windows窗体
EN

Stack Overflow用户
提问于 2012-10-25 17:05:54
回答 1查看 417关注 0票数 0

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

表单中的WCF服务有一个"basicHttpBinding“端点,还有一个"mexHttpBinding”端点。我能够用'WCF测试客户端‘来测试表单中的服务,没有任何问题。

在Windows中,我能够向表单的服务添加一个Service引用,一切都很好。但是,当我实际运行Windows服务并尝试使用表单中的WCF服务时,我会得到以下错误:

由于/shutMeDown的ContractFilter不匹配,无法在接收端处理带有动作‘EndpointDispatcher’的消息。这可能是因为契约不匹配(发送方和接收方之间的操作不匹配),或者是发送方和接收方之间的绑定/安全不匹配。检查发送方和接收方是否具有相同的合同和相同的约束力(包括安全要求,例如消息、传输、无)。

看到里面的"IService1“了吗?我很确定这就是问题所在。Windows本身被配置为承载一个名为"Service1“的服务,如您在下面的<services>部分中所看到的。所以我的app.config好像出了点问题。

我最好的猜测是,我在app.config中设置app.config的方式有问题。看起来,由于某种原因,当我试图使用表单中的服务时,使用的地址是错误的。它使用的是它自己的服务地址,而不是表单服务的地址。

下面是来自我的Windows的app.config的相关部分:

代码语言:javascript
代码运行次数:0
运行
复制
<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服务。在同一台机器上,我有一个Widows表单。Windows窗体公开允许Windows服务与其交互的服务。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-25 19:50:08

我的问题如下。我只定义了传出的<bindings>。我需要做的是定义传入绑定和传出绑定,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IService1" />
            <binding name="BasicHttpBinding_IFormControlService" />
        </basicHttpBinding>
    </bindings>

由于未定义传出绑定,所以我的Windows正在查看<basicHttpBinding>并仅使用默认绑定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13073673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档