WCF 元数据包含无法解析的引用 [英] WCF Metadata contains a reference that cannot be resolved

查看:25
本文介绍了WCF 元数据包含无法解析的引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我花了几个小时搜索这个错误,而且我已经测试了它在 Google 上的几乎所有内容.

I've spent a couple of hours searching about this error, and I have tested almost everything it's on Google.

我想在 C# 中使用 TCP、.NET4 和 VS2010 访问服务.

我有一个非常小的服务:

I Have a very tiny service:

namespace WcfService_using_callbacks_via_tcp
{
    [ServiceContract(CallbackContract = typeof(ICallback), SessionMode = SessionMode.Required)]
    public interface IService1
    {
        [OperationContract]
        string Test(int value);
    }

    public interface ICallback
    {
        [OperationContract(IsOneWay = true)]
        void ServerToClient(string sms);
    }
    [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class Service1 : IService1
    {
        public string Test(int value)
        {
            ICallback the_callback = OperationContext.Current.GetCallbackChannel<ICallback>();
            the_callback.ServerToClient("Callback from server, waiting 1s to return value.");
            Thread.Sleep(1000);
            return string.Format("You entered: {0}", value);
        }

    }
}

<小时>

使用此 Web.config:


With this Web.config:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="WcfService_using_callbacks_via_tcp.Service1" behaviorConfiguration="Behaviour_Service1">
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:5050/Service1" />
          </baseAddresses>
        </host>
        <endpoint address="" binding="netTcpBinding" bindingConfiguration="DuplexNetTcpBinding_IService1" contract="WcfService_using_callbacks_via_tcp.IService1"/>
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="mexTcp" contract="IMetadataExchange"/>
      </service>
    </services>

    <bindings>
      <!--
        TCP Binding
      -->
      <netTcpBinding>
        <binding name="DuplexNetTcpBinding_IService1" sendTimeout="00:00:01"
                 portSharingEnabled="true">

        </binding>

        <binding name="mexTcp" portSharingEnabled="true">
          <security mode="None" />
        </binding>
      </netTcpBinding>


    </bindings>

    <behaviors>
      <serviceBehaviors>
        <!--
          Behaviour to avoid a rush of clients and to expose metadata over tcp
        -->
        <behavior name="Behaviour_Service1">
          <serviceThrottling maxConcurrentSessions="10000"/>
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>

        <behavior>
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

<小时>

和托管它的代码:


And this code to host it:

static void Main(string[] args)
{
    Uri base_address = new Uri("net.tcp://localhost:5050/Service1");
    ServiceHost host = null;
    try
    {
        // Create the server
        host = new ServiceHost(typeof(Service1), base_address);
        // Start the server
        host.Open();
        // Notify it
        Console.WriteLine("The service is ready at {0}", base_address);
        // Allow close the server
        Console.WriteLine("Press <Enter> to stop the service.");
        Console.ReadLine();
        // Close it
        host.Close();
    }
    catch (Exception ex)
    {
        // Opus an error occurred
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine(string.Format("Host error:
{0}:
{1}", ex.GetType(), ex.Message));
        Console.ReadLine();
    }finally
    {
        // Correct memory clean
        if(host != null)
            ((IDisposable)host).Dispose();
    }
}

<小时>

现在我想创建客户端,但我不可能.我已经直接使用了 Add Service Reference 和 svcutil,但是我收到了这个错误:


Now I want to create the client, but I it is not posible. I've used Add Service Reference and svcutil directly, but I am receiving this error:

C:Program Files (x86)Microsoft Visual Studio 10.0VC>svcutil.exenet.tcp://loc alhost:5050/Service1 Microsoft (R) 服务模型元数据工具 [Microsoft (R) Windows (R) 通信基础,版本 4.0.30319.1] 版权所有 (c) Microsoft Corporation.所有权利保留.

C:Program Files (x86)Microsoft Visual Studio 10.0VC>svcutil.exe net.tcp://loc alhost:5050/Service1 Microsoft (R) Service Model Metadata Tool [Microsoft (R) Windows (R) Communication Foundation, Version 4.0.30319.1] Copyright (c) Microsoft Corporation. All rights reserved.

尝试从以下位置下载元数据'net.tcp://localhost:5050/Service1' 使用 W S-Metadata Exchange.这URL 不支持 DISCO.Microsoft (R) 服务模型元数据工具[Microsoft (R) Windows (R) 通信基础版本4.0.30319.1] 版权所有 (c) Microsoft Corporation.保留所有权利.

Attempting to download metadata from 'net.tcp://localhost:5050/Service1' using W S-Metadata Exchange. This URL does not support DISCO. Microsoft (R) Service Model Metadata Tool [Microsoft (R) Windows (R) Communication Foundation, Version 4.0.30319.1] Copyright (c) Microsoft Corporation. All rights reserved.

错误:无法从 net.tcp://localhost:5050/Service1 获取元数据

Error: Cannot obtain Metadata from net.tcp://localhost:5050/Service1

如果这是 Windows (R) Communication Foundation 服务,您有访问权限,请检查您是否已启用元数据发布在指定的地址.如需帮助启用元数据发布,请参阅 MSDN 文档,网址为http://go.microsoft.com/fwlink/?LinkId=65455.

If this is a Windows (R) Communication Foundation service to which you have acce ss, please check that you have enabled metadata publishing at the specified addr ess. For help enabling metadata publishing, please refer to the MSDN documentat ion at http://go.microsoft.com/fwlink/?LinkId=65455.

WS-元数据交换错误URI:net.tcp://localhost:5050/Service1

WS-Metadata Exchange Error URI: net.tcp://localhost:5050/Service1

元数据包含无法解析的引用:'net.tcp://localhost: 5050/Service1'.

Metadata contains a reference that cannot be resolved: 'net.tcp://localhost: 5050/Service1'.

套接字连接已中止.这可能是由于处理您的消息时出错或超过了接收超时远程主机,或潜在的网络资源问题.当地的套接字超时为00:04:59.9863281".

The socket connection was aborted. This could be caused by an error processi ng your message or a receive timeout being exceeded by the remote host, or an un derlying network resource issue. Local socket timeout was '00:04:59.9863281'.

Se ha forzado la interrupción de una conexiónexistente por el host remoto

Se ha forzado la interrupción de una conexión existente por el host remoto

如果您需要更多帮助,请输入svcutil/?"

If you would like more help, type "svcutil /?"

<小时>

因此,我可以毫无问题地托管服务,但无法创建代理.


So, I can host the service without problems but I can not create the proxies.

我已经尝试了几乎所有找到的配置,但我认为当前的 web.config 是正确的.有端点使用的行为、安全性和使用 mex 的绑定.

I've tried almost any config I've found, but I think the current web.config is correct. There are the behaviours, the security, and the bindings using mex, used by the endpoints.

我尝试创建一个 app.config 并将其设置为与 svcutil.exe 相同的文件夹.

I've tried to create an app.config and set it to the same folder with svcutil.exe.

推荐答案

您缺少服务配置

<system.serviceModel>
  <services>
    <service name="WcfService_using_callbacks_via_tcp.Service1" 
      behaviorConfiguration="Behavior_Service1">
      <host>
        <baseAddresses>
          <add baseAddress="net.tcp://localhost:5050/Service1" />
        </baseAddresses>
      </host>
      <endpoint address="" contract="WcfService_using_callbacks_via_tcp.IService1"
         binding="netTcpBinding" bindingConfiguration="DuplexNetTcpBinding_IService1" />
      <endpoint address="mex" contract="IMetadataExchange" binding="mexTcpBindng" />
    </service>
  </services>
  ...
</system.serviceModel>

使用此配置,您不需要在代码中定义基地址.

With this config you should not need to define base address in code.

这篇关于WCF 元数据包含无法解析的引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆