无法在类库应用程序中使用 WCF 服务 [重复]

Posted

技术标签:

【中文标题】无法在类库应用程序中使用 WCF 服务 [重复]【英文标题】:Not able to consume WCF service in Class Library Application [duplicate] 【发布时间】:2015-03-26 11:18:45 【问题描述】:

我有一个在 IIS 8.5 上运行的 WCF 服务。我在 Windows 窗体项目和控制台应用程序项目中使用并测试了该服务,并且工作正常!但我无法使用 Visual Studio 2013 中的类库项目中的 Web 服务。

在 ServiceModel 客户端配置部分中找不到引用合同“bindSignalR.bindSinalRService”的默认端点元素。这可能是因为找不到您的应用程序的配置文件,或者因为在客户端元素中找不到与此合同匹配的端点元素。

我查看了 Windows 窗体项目(有效)和类库项目的配置文件,但找不到区别。我做错了什么?

服务的web.Config是:

<configuration>
    <system.web>
      <compilation targetFramework="4.0" />
    </system.web>

    <system.serviceModel>
                   <behaviors>
            <serviceBehaviors>
                <behavior name="">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="true" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <bindings>
            <customBinding>
                <binding name="bindSignalRService.Web.bindSinalRService.customBinding0">
                    <binaryMessageEncoding />
                    <httpTransport />
                </binding>
                               </customBinding>
        </bindings>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
            multipleSiteBindingsEnabled="true" />
        <services>
            <service name="bindSignalRService.Web.bindSinalRService">
                <endpoint address="" binding="customBinding" bindingConfiguration="bindSignalRService.Web.bindSinalRService.customBinding0"
                    contract="bindSignalRService.Web.bindSinalRService" />
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            </service>
        </services>
    </system.serviceModel>
</configuration>

Windows 窗体中的 app.config(这个可以正常工作!)应用:

<configuration>
    <configSections>
    </configSections>
    <system.serviceModel>
        <bindings>
            <customBinding>
                                   <binding name="CustomBinding_bindSinalRService">
                    <binaryMessageEncoding />
                    <httpTransport />
                </binding>
            </customBinding>
        </bindings>
        <client>
          <endpoint address="http://slascvm042:49904/bindSinalRService.svc"
                binding="customBinding" bindingConfiguration="CustomBinding_bindSinalRService"
                contract="bindNewEventService.bindSinalRService" name="CustomBinding_bindSinalRService" />

        </client>
    </system.serviceModel>
</configuration>

但是当我尝试在类库应用程序中使用 WCF 服务时,我得到了错误: 在 ServiceModel 客户端配置部分中找不到引用合同“bindSignalR.bindSinalRService”的默认端点元素。这可能是因为找不到您的应用程序的配置文件,或者因为在客户端元素中找不到与此合同匹配的端点元素。

【问题讨论】:

我得到的错误是粗体和中心的错误。 在什么情况下会出现该错误。我相信你的意思是你有一个例外。请发布完整的异常,包括堆栈跟踪和任何内部异常。出于故障排除目的,执行此操作的简单方法是捕获异常,然后发布 ex.ToString() 的结果。 您在什么进程中托管类库?看起来托管您的库的应用程序的配置尚未使用上述配置进行更新。 System.InvalidOperationException:在 ServiceModel 客户端配置部分中找不到名为“Hola1”和合同“bindSignalRService.Web.bindSinalRService”的端点元素。这可能是因为找不到您的应用程序的配置文件,或者因为在客户端元素中找不到与此名称匹配的端点元素。 【参考方案1】:

已解决:感谢您尝试帮助我。我在这方面真的很难过(投入了很多很多时间)。

当您在库应用程序中使用 Web 服务时(无论您打算在哪里使用您的库),您必须将 app.config 文件的端点和绑定部分从您的库复制到 (web/app)。在项目中配置你想使用你的LIBRARY!!!(如果有问题请纠正我)。

就我而言,我复制了:

<system.serviceModel>
    <bindings>
        <customBinding>
            <binding name="bind">
                <binaryMessageEncoding />
                <httpTransport />
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:49904/bindSinalRService.svc"
            binding="customBinding" bindingConfiguration="bind" contract="bindSignalRService.Web.bindSinalRService"
            name="myEnpointName" />
    </client>
</system.serviceModel>

【讨论】:

事实上,对于类库来说总是如此。 无论放置在类库的 app.config 中,都需要移动到消费应用程序的 app.config 或 web.config 中。从第 1 天开始就是这样。考虑到库的使用者可能不止一个,并且特定于库的任何配置对于每个使用者都可能不同。

以上是关于无法在类库应用程序中使用 WCF 服务 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在类库项目中添加 WCF 服务引用,并在使用该类库的网站中添加相同的 WCF 引用。

在 NetStandard 2.0 类库中托管 WCF 服务

IIS Express错误http 404.17 - 未找到运行WCF服务

通过 WCF 访问类库

增加C#类库(DLL)调用wcf服务超时

在我的 Web 应用程序引用的类库中访问 wcf 数据服务时出现问题