【问题标题】:InvalidOperationException while creating wcf web service instance创建 wcf Web 服务实例时出现 InvalidOperationException
【发布时间】:2008-08-24 12:11:01
【问题描述】:

我有一个从类库中引用的 WCF Web 服务。项目运行后,从类库中创建服务客户端对象时,我收到 InvalidOperationException 消息:

找不到引用合约的默认端点元素 ServiceModel 客户端中的“MyServiceReference.IMyService” 配置部分。这可能是因为没有配置文件 为您的应用程序找到,或者因为没有匹配的端点元素 该合同可以在客户端元素中找到。

我用来创建实例的代码是:

myServiceClient = new MyServiceClient();

MyServiceClient 继承自哪里

System.ServiceModel.ClientBase

我该如何解决这个问题?

注意:我有一个单独的控制台应用程序,它只是创建相同的服务对象并对其进行调用,它可以正常工作。

【问题讨论】:

    标签: .net wcf web-services


    【解决方案1】:

    或者您可以在代码中设置端点:

    http://msdn.microsoft.com/en-us/library/ms731862.aspx

    BasicHttpBinding binding = new BasicHttpBinding();
    EndpointAddress address = new EndpointAddress("http://url-to-service/");
    
    // Create a client that is configured with this address and binding.
    MyServiceClient client = new MyServiceClient(binding, address);
    

    【讨论】:

      【解决方案2】:

      这是我的类库的 app.config 文件:

      您应该将此配置设置放到主应用程序的配置文件中。 .NET 应用程序(它正在调用您的类库)使用来自它自己的配置文件的数据,而不是来自您的库配置文件的数据。

      【讨论】:

        【解决方案3】:

        我也遇到过类似的情况。我有一个调用 Web 服务的类库,然后我有一个调用类库的 .DLL 的 .EXE。我认为使用的是 .EXE 的配置文件,而不是 .DLL 配置的配置文件。

        但正如 Richard 上面所说,我必须完全限定命名空间。这有点痛苦。 下面正是我改变的。痛苦的是我不得不在两个地方改变它, 一个在创建服务引用时生成的 reference.cs 中,另一个在配置文件中。因此,每次我更改 Web 服务并执行“更新参考”时,我都必须再次更改 C# 代码。

        1)您必须实际更改reference.cs中的ConfigurationName,如下所示:

        发件人:[System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = " RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

        收件人:[System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = "TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

        2) 然后更改所有相关 app.config(针对 .dll 和 .exe)中的“contract”值,如下所示:

        发件人:

        http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITwoWayAsync" 合同="RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations" name="WSHttpBinding_ITwoWayAsync">

        收件人:

        http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITwoWayAsync" contract="TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestras" name="WSHttpBinding_ITwoWayAsync">

        要明确一点 - 我怎么知道完整的命名空间是什么? 该程序的名称空间是 TFBIC.RCT.HIP。在其中,C# 代码有一个额外的 命名空间声明:

        namespace RCTHipComponents
        

        【讨论】:

          【解决方案4】:

          如果您发布您的 app.config 文件可能会有所帮助,因为这种错误往往指向 <endpoint> 块中的问题。确保合同属性对您来说是正确的。

          编辑:尝试完全限定您的合同价值;使用完整的命名空间。我认为这是必要的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-07-11
            • 2016-10-25
            • 1970-01-01
            • 2012-02-07
            • 1970-01-01
            • 2016-03-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多