我已经在VS2008/中添加了web服务的代理。NET 3.5解决方案。在构造客户端。net时会抛出以下错误:

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

搜索此错误告诉我在契约中使用完整的名称空间。这是我的app.config完整的命名空间:

<client>
  <endpoint address="http://192.168.100.87:7001/soap/IMySOAPWebService"
            binding="basicHttpBinding" bindingConfiguration="IMySOAPWebServicebinding"
            contract="Fusion.DataExchange.Workflows.IMySOAPWebService" name="IMySOAPWebServicePort" />
</client>

我正在运行XP本地(我提到这是因为一些谷歌点击提到win2k3) 将app.config复制到app.exe。配置,所以这也不是问题。

有线索吗?


当前回答

我遇到过这样的情况,我

WCF服务托管在某处 主要项目 类型为“类库”的消费者项目,该项目具有对WCF服务的服务引用 主项目从使用者项目调用方法

现在Consumer项目已经在<system中设置了所有相关的配置。我的app.config的serviceModel>标签,它仍然抛出与上面相同的错误。

我所做的只是添加了相同的标签<system。serviceModel>到我的主项目的app.config文件,最后我们就可以开始了。

就我的情况而言,真正的问题是读取了错误的配置文件。而不是消费者的app.config,它引用的是主项目的配置。我花了两个小时才弄明白。

其他回答

如果在类库中引用web服务,则必须将app.config复制到windows应用程序或控制台应用程序中

解决方案:将外部项目的配置与类库的wcf配置相同。

为我工作

如果在类库中调用服务,并从另一个项目调用类库,则可能出现此错误。

对我来说,解决方案是从客户端web.config中的端点名称属性中删除端点名称 这允许代理使用

ChannelFactory<TService> _channelFactory = new ChannelFactory<TService>("");

锻炼了一整天。 此外,一旦这个修复到位,合同名称是错误的,尽管它在最初的错误出现时是错误的。 再三检查合同名称字符串的人!! 属性:伊恩

“如果在类库中调用服务,并从另一个项目调用类库,则可能出现此错误。” 在这种情况下,如果是winapp或web,则需要将WS配置设置包含到主项目app.config中。如果它是一个web应用程序,就配置它。这是即使使用PRISM和WPF/Silverlight的方式。”

是的,但是如果你不能改变主项目(例如Orchard CMS),你可以在你的项目中保留WCF服务配置。

你需要用客户端生成方法创建一个服务助手:

public static class ServiceClientHelper
{
    public static T GetClient<T>(string moduleName) where T : IClientChannel
    {
        var channelType = typeof(T);
        var contractType = channelType.GetInterfaces().First(i => i.Namespace == channelType.Namespace);
        var contractAttribute = contractType.GetCustomAttributes(typeof(ServiceContractAttribute), false).First() as ServiceContractAttribute;

        if (contractAttribute == null)
            throw new Exception("contractAttribute not configured");

        //path to your lib app.config (mark as "Copy Always" in properties)
        var configPath = HostingEnvironment.MapPath(String.Format("~/Modules/{0}/bin/{0}.dll.config", moduleName)); 

        var configuration = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = configPath }, ConfigurationUserLevel.None);
        var serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(configuration);

        if (serviceModelSectionGroup == null)
            throw new Exception("serviceModelSectionGroup not configured");

        var endpoint = serviceModelSectionGroup.Client.Endpoints.OfType<ChannelEndpointElement>().First(e => e.Contract == contractAttribute.ConfigurationName);
        var channelFactory = new ConfigurationChannelFactory<T>(endpoint.Name, configuration, null);
        var client = channelFactory.CreateChannel();
        return client;
    }
}

并使用它:

using (var client = ServiceClientHelper.GetClient<IDefaultNameServiceChannel>(yourLibName)) {
                ... get data from service ...
            }

详见本文。

我曾经遇到过这个问题。这是因为我还在开发使用WCF服务的接口。我配置测试应用程序和继续开发。然后在开发中,我改变了一些服务的名称空间。所以我再次检查了“系统”。serviceModel ->客户端->端点->合同”。配置匹配WCF类。那么问题就解决了。