WCF 错误 - 找不到引用合同“UserService.UserService”的默认端点元素

Posted

技术标签:

【中文标题】WCF 错误 - 找不到引用合同“UserService.UserService”的默认端点元素【英文标题】:WCF Error - Could not find default endpoint element that references contract 'UserService.UserService' 【发布时间】:2010-10-16 12:36:32 【问题描述】:

任何想法如何解决这个问题?

UserService.UserServiceClient userServiceClient = new UserServiceClient();
            userServiceClient.GetUsersCompleted += new EventHandler<GetUsersCompletedEventArgs>(userServiceClient_GetUsersCompleted);
            userServiceClient.GetUsersAsync(searchString);

.

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_UserService" 
                     maxBufferSize="2147483647" 
                     maxReceivedMessageSize="2147483647">
                <security mode="None" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:52185/UserService.svc" 
                  binding="basicHttpBinding" 
                  bindingConfiguration="BasicHttpBinding_UserService" 
                  contract="UserService.UserService"
                  name="BasicHttpBinding_UserService" />
    </client>
    <behaviors>
        <serviceBehaviors>
            <behavior name="Shell.Silverlight.Web.Service3Behavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <services>
        <service behaviorConfiguration="Shell.Silverlight.Web.Service3Behavior" 
                 name="Shell.Silverlight.Web.Service3">
            <endpoint address="" 
                      binding="basicHttpBinding" 
                      contract="Shell.Silverlight.Web.Service3" />
            <endpoint address="mex" 
                      binding="mexHttpBinding" 
                      contract="IMetadataExchange" />
        </service>
    </services>
</system.serviceModel>

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

已解决!

我没有提到这是一个 Silverlight 应用程序。我在一个 DLL 中有 wcf 引用,它有自己的“ServiceReferences.ClientConfig”文件。我将 DLL 的 ServiceReferences.ClientConfig 的内容移到了主 silverlight 项目中,它工作了。

【问题讨论】:

如果运行 DLL 的应用程序是第三方,例如DLL 是另一个应用程序的插件? 【参考方案1】:

我遇到了同样的问题。我的应用程序也是一个 Silverlight 应用程序,该服务是从一个类库中调用的,该类库中使用了一个自定义 UserControl。

解决方案很简单。将端点定义从类库的配置文件(例如 ServiceReferences.ClientConfig)复制到 silverlight 应用程序的配置文件。我知道你会期望它不必这样做就可以工作,但显然雷德蒙德的某个人那天放假了。

【讨论】:

此解决方案也适用于 ASP.NET 和 MVC 项目。如果您将服务添加到类库中,则无法解决问题,请从库项目中的 app.config 中获取 system.serviceModel 部分并将其放入您的 web.config 中。 看起来这适用于任何类型的项目,我使用quartz.net 作为Windows 服务,并且在引用Web 服务的不同程序集上工作。它也对我有用。谢谢。 嗨,它也适用于 Windows Phone 项目。正如@thiagoleite 所说,它似乎适用于大多数项目类型。 +1 为雷德蒙德假期玩笑...无论如何,有没有办法将其添加为外部文件,而不是使用 web.config @sprite 我最终在代码中设置了所需的设置(我已经覆盖了客户端构造函数),就像 Vishal 的 answer。这样它就可以跨组件运送。谢谢!【参考方案2】:

您也可以在类库中以编程方式设置这些值,这将避免配置文件在类库中不必要的移动。 简单 BasciHttpBinding 的示例代码是 -

BasicHttpBinding basicHttpbinding = new BasicHttpBinding(BasicHttpSecurityMode.None);
basicHttpbinding.Name = "BasicHttpBinding_YourName";
basicHttpbinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
basicHttpbinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

EndpointAddress endpointAddress = new EndpointAddress("http://<Your machine>/Service1/Service1.svc");
Service1Client proxyClient = new Service1Client(basicHttpbinding,endpointAddress);

【讨论】:

@wooncherk,我的类库只是对 wsdl 的引用。我应该把这段代码放在哪里?我将它构建到 C# dll 中,并将 dll 放入我的应用程序文件中,我从 IronPython 引用它。谢谢【参考方案3】:

以防万一有人在使用 WPF(而不是 WCF 或 Silverlight)时遇到同样的问题:

我在连接到 Web 服务时遇到了这个错误。当我的代码在“主要”WPF 应用程序解决方案中时,没问题,它运行良好。但是当我将代码移到更明智的 DAL 层解决方案时,它会抛出异常。

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

正如“Sprite”在此线程中所说,您需要手动复制标签。

对于 WPF 应用程序,这意味着将标记从我的 DAL 解决方案中的 app.config 复制到主 WPF 应用程序解决方案中的 app.config

【讨论】:

这很好,但在我自己的回答下作为简短评论会更好,就像“Adam Pope”一样。它会被更多人阅读。 @sprite:我会添加评论,但 *** cmets 总是显示为一个长段落。对于像我这样的 5 段回复,这将导致一段冗长、不可读、不友好的段落。写一个单独的回复可以让我给出一个更清晰的答案,这更有可能帮助其他用户(让我们面对现实,这就是这样的网站的重点)【参考方案4】:

我遇到了同样的问题,无论出于何种原因,我第一次添加服务时 Visual Studio 都没有更新 Web 配置。我发现更新服务参考也解决了这个问题。

步骤:

    导航到服务参考文件夹 展开 右键单击并选择更新服务参考 观察网络配置更新

【讨论】:

是的,这对我有用。我正在使用第 3 方 wsdl 服务参考,并且在更新服务参考之前出现此错误 我也是。这很明显,因为它工作正常而突然不行。我可能进行了更改,但没有更新服务参考。【参考方案5】:

将 WCF 服务的 web.config 更改为“endpoint address="" binding="basicHttpBinding"..." (之前的 binding="wsHttpBinding") 构建应用后,在 "ServiceReferences.ClientConfig" ""configuration>有价值。然后就可以正常工作了。

【讨论】:

【参考方案6】:

将 svcutil.exe 生成的 output.config 重命名为 app.config。 它对我有用。

【讨论】:

【参考方案7】:

你有你的“UserService”类实现的接口吗?

您的端点应该为合约属性指定一个接口:

contract="UserService.IUserService"

【讨论】:

【参考方案8】:

不确定这是否是一个问题。 端点和绑定都具有相同的名称

【讨论】:

【参考方案9】:

不确定是否真的有问题,但我看到您的绑定配置 () 具有相同的名称。

我通常尝试将我的端点称为“UserServiceBasicHttp”或类似的东西(“Binding”在这里真的没有任何事情可做),我尝试用“....Configuration”来调用我的绑定配置",例如“UserServiceDefaultBinding”,以避免任何潜在的名称冲突。

马克

【讨论】:

【参考方案10】:

必须在调用 App.config 文件中添加服务才能使其正常工作。确保你不过如此。这似乎对我有用。

【讨论】:

【参考方案11】:

当您通过其他应用程序使用您的服务时会出现此问题。如果应用程序有配置文件,只需将您的服务配置信息添加到此文件。 在我的情况下,没有任何配置文件,所以我使用了这种技术并且效果很好。只需将 url 地址存储在应用程序中,读取它并使用 BasicHttpBinding() 方法将其作为参数发送到服务应用程序。这是我如何做的简单演示它:

Configuration config = new Configuration(dataRowSet[0]["ServiceUrl"].ToString());

var remoteAddress = new System.ServiceModel.EndpointAddress(config.Url);


SimpleService.PayPointSoapClient client = 
    new SimpleService.PayPointSoapClient(new System.ServiceModel.BasicHttpBinding(), 
    remoteAddress);
SimpleService.AccountcredResponse response = client.AccountCred(request);

【讨论】:

【参考方案12】:

对于那些使用 AX 2012 AIF 服务并尝试在 AX (x++) 中调用 C# 或 VB 项目并遇到 此类错误的人找不到默认端点”... 或 “未找到合约” ... 返回到您的 Visual Studio (C#) 项目并在定义服务客户端之前添加这些行,然后部署项目并重新启动 AX 客户端并重试: 请注意,此示例适用于 NetTcp 适配器,您可以根据需要轻松使用任何其他适配器。

 Uri Address = new Uri("net.tcp://your-server:Port>/DynamicsAx/Services/your-port-name");
 NetTcpBinding Binding = new NetTcpBinding();
 EndpointAddress EndPointAddr = new EndpointAddress(Address);
 SalesOrderServiceClient Client = new SalesOrderServiceClient(Binding, EndPointAddr);

【讨论】:

【参考方案13】:

如果您使用 PRISM 框架使用 WPF 应用程序,那么配置应该存在于您的启动项目中(即在您的引导程序所在的项目中。)

简而言之,只需将其从类库中删除并放入启动项目中即可。

【讨论】:

以上是关于WCF 错误 - 找不到引用合同“UserService.UserService”的默认端点元素的主要内容,如果未能解决你的问题,请参考以下文章

找不到引用合同的默认端点元素:通过 Powershell cmdlet 连接到 WCF 端点

找不到端点异常 - WCF Web 服务

找不到端点异常 - WCF Web 服务

找不到 WCF 合同名称“IMyService”?

WCF - 在合同列表中找不到合同名称

“找不到引用合同的默认端点元素”