WCF错误-找不到引用合同'UserService.UserService'的默认终结点元素


98

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

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应用程序。我在自己的“ ServiceReferences.ClientConfig”文件的DLL中有wcf参考。我将DLL的ServiceReferences.ClientConfig的内容移到了主要的silverlight项目中,并且它可以正常工作。


如果运行DLL的应用程序是第三方,例如DLL是另一个应用程序的插件怎么办?
Stefanos Kargas

Answers:


186

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

解决方案很简单。将端点定义从类库的配置文件(例如ServiceReferences.ClientConfig)复制到silverlight应用程序的配置文件。我知道您会期望它在无需执行此操作的情况下就可以工作,但显然Redmond的某人那天放假了。


50
该解决方案也适用于ASP.NET和MVC项目。如果将服务添加到类库中,它将无法解决问题,请从库项目中的app.config中获取system.serviceModel部分,并将其放入web.config中。
亚当·波普

5
对于任何类型的项目而言,这似乎都是正确的。我使用quartz.net作为Windows服务,并在另一个引用Web服务的程序集上工作。它也对我有用。谢谢。
thiagoleite 2012年

2
嗨,它也适用于Windows Phone项目。正如@thiagoleite所说,它似乎适用于大多数项目类型。
Thanushka

3
+1为Redmond度假笑话...无论如何,有没有一种方法可以将其添加为外部文件而不是玩web.config
Shimmy Weitzhandler,2015年

1
@sprite我最终在代码中设置了所需的设置(我已经覆盖了客户端构造函数),作为Vishal的答案。这样,它就可以跨组件运输。谢谢!
Shimmy Weitzhandler,2015年

45

您也可以在类库中以编程方式设置这些值,这样可以避免配置文件在库中不必要的移动。简单的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那里引用它。谢谢
Срба

12

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

连接到Web服务时出现此错误。当我的代码在“主要” WPF应用程序解决方案中时,没问题,它可以完美运行。但是,当我将代码移至更明智的DAL层解决方案时,它将引发异常。

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

正如该线程中“ Sprite”所指出的那样,您需要手动复制标签。

对于WPF应用程序,这意味着复从标签的app.config在我DAL解决的app.config主WPF应用程序的解决方案。


这很好,但是最好在我自己的回答下做简短评论,就像“亚当·波普”一样。它会被更多的人阅读。
精灵

2
@sprite:我会添加一条注释,但是StackOverflow注释始终只显示为一个较长的段落。对于像我这样的5段回复,这将导致一段较长,不可读,不友好的段落。撰写单独的回复可以让我给出更明确的答案,这更有可能帮助其他用户(让我们面对
现实,

6

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

脚步:

  1. 导航到服务参考文件夹
  2. 展开
  3. 右键单击并选择更新服务参考
  4. 观察Web Config是否已更新

是的,这对我有用。我正在使用第三方wsdl服务参考,并且在更新服务参考之前收到此错误
ejhost

我也是 这是显而易见的,因为它可以正常工作,突然之间却无法正常工作。我可能做了更改,但没有更新服务参考。

4

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


3

将svcutil.exe生成的output.config重命名为app.config。它为我工作。


2

您是否具有“ UserService”类实现的接口。

端点应为contract属性指定一个接口:

contract="UserService.IUserService"


1

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

我通常尝试将端点称为“ UserServiceBasicHttp”或类似名称(“ Binding”在此实际上没有任何作用),并且尝试将绑定配置称为“ .... Configuration”,例如“ UserServiceDefaultBinding”,以避免任何潜在的名称冲突。

马克


0

必须在调用App.config文件中添加该服务才能使其正常工作。确保你,但毕竟。这似乎对我有用。


0

当您通过其他应用程序使用服务时,会发生此问题。如果应用程序具有配置文件,只需将服务配置信息添加到此文件中。在我的情况下,没有任何配置文件,因此我使用了此技术,它工作正常。只需将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);

0

对于那些使用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);

-2

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.