当前位置:编程学习 > C#/ASP.NET >>

关于WCF netTcp 服务引用的问题,新手请教

我在客服端添加服务引用时出现的问题,找不到

我的配置文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <client />
    <bindings>
      <netTcpBinding>
        <binding name="netTcpConfig" portSharingEnabled="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="None">
            <transport clientCredentialType="Windows" />
            <message clientCredentialType="Windows" />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="MyBehavior" name="WcfServiceLibrary.Service1">
        <endpoint address="net.tcp://localhost:4305/WcfServiceLibrary/Service1"
          binding="netTcpBinding" bindingConfiguration="netTcpConfig"
          contract="WcfServiceLibrary.IService1" />
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8000" />
          </baseAddresses>
          <timeouts closeTimeout="00:01:00" />
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyBehavior">
          <serviceMetadata httpGetEnabled="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

百度了好久也没找到问题,烦请高手帮忙看看,谢谢!

我的大致步骤:
1.先新建一个WCF服务库
2.再host到添加的一个控制台程序
3.新建一个Windowns程序做客户端
在添加服务引用时找不到WCF服务

请问这步骤是对的吗?不对应该是怎样?这里问题在哪? --------------------编程问答--------------------
然后我从旁边发现按钮里从解决方案里有显示但也有问题




--------------------编程问答--------------------
先启动主机 和从发现在点击显示的服务后报错 --------------------编程问答-------------------- <add baseAddress="net.tcp://localhost:8000" />
改为
<add baseAddress="http://localhost:8000" />
然后访问这个“http://localhost:8000”就可以得到引用了。 --------------------编程问答--------------------
引用 3 楼 qldsrx 的回复:
<add baseAddress="net.tcp://localhost:8000" />
改为
<add baseAddress="http://localhost:8000" />
然后访问这个“http://localhost:8000”就可以得到引用了。


mex 的binding还要修改。直接用 net.tcp://localhost:4305/WcfServiceLibrary/Service1?wsdl 添加引用吧。 --------------------编程问答--------------------
引用 4 楼 fangxinggood 的回复:
引用 3 楼 qldsrx 的回复:<add baseAddress="net.tcp://localhost:8000" />
改为
<add baseAddress="http://localhost:8000" />
然后访问这个“http://localhost:8000”就可以得到引用了。

mex 的binding还要修改。直接用 net.tcp:/……



没用,试了一晚上

能全部需要改的原码吗? --------------------编程问答-------------------- 需要改变的地方麻烦贴下源码,谢谢!!! --------------------编程问答-------------------- 不好意思,我没说清楚,HTTP的是可以的,但我这里要netTcp来绑定!!!不好意思 --------------------编程问答-------------------- 添加服务引用的地址中 http 改为 net.tcp --------------------编程问答-------------------- <behavior name="MyBehavior">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
先试试 --------------------编程问答--------------------
引用 8 楼 fangxinggood 的回复:
添加服务引用的地址中 http 改为 net.tcp



报错 --------------------编程问答-------------------- 搞错了,是这位大侠的建议报错
引用 9 楼 mq2003hwj 的回复:
<behavior name="MyBehavior">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
先试试
--------------------编程问答--------------------
引用 8 楼 fangxinggood 的回复:
添加服务引用的地址中 http 改为 net.tcp
改为net.tcp查找不到服务 --------------------编程问答-------------------- 把配置文件删除了,参照我的代码用编程方式启动服务,我的代码不需要配置文件即可启动服务,通过http://localhost:10001获取元数据,服务地址是net.tcp://localhost:10000


ServiceHost host = new ServiceHost(typeof(WcfService));
            host.AddServiceEndpoint(typeof(IWcfService), new WSHttpBinding(), @"net.tcp://localhost:10000");
            ServiceMetadataBehavior meta = new ServiceMetadataBehavior();
            meta.HttpGetEnabled = true;
            meta.HttpGetUrl = new Uri(@"http://localhost:10001");
            host.Description.Behaviors.Add(meta);
            host.Open();
            if (host.State == CommunicationState.Opened)
            {
                Console.WriteLine("Host is opened");
            }
            Console.Read();
--------------------编程问答-------------------- 上面WSHttpBinding改为NetTcpBinding. --------------------编程问答--------------------
引用 13 楼 mq2003hwj 的回复:
把配置文件删除了,参照我的代码用编程方式启动服务,我的代码不需要配置文件即可启动服务,通过http://localhost:10001获取元数据,服务地址是net.tcp://localhost:10000

C# code?123456789101112ServiceHost host = new ServiceHost(typeof(WcfService));  ……
是的,可以启动,其实之前也可以启动,一直存在的问题就是添加引用时找不到 --------------------编程问答-------------------- 按照我这个的http地址可以找到引用吧? --------------------编程问答--------------------
引用 13 楼 mq2003hwj 的回复:
把配置文件删除了,参照我的代码用编程方式启动服务,我的代码不需要配置文件即可启动服务,通过http://localhost:10001获取元数据,服务地址是net.tcp://localhost:10000

C# code?123456789101112ServiceHost host = new ServiceHost(typeof(WcfService));  ……
错误信息:
元数据包含无法解析的引用:“net.tcp://localhost:10000/”。
套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的。本地套接字超时是“00:04:58.9959426”。
远程主机强迫关闭了一个现有的连接。
如果该服务已在当前解决方案中定义,请尝试生成该解决方案,然后再次添加服务引用。 --------------------编程问答--------------------
引用 16 楼 mq2003hwj 的回复:
按照我这个的http地址可以找到引用吧?

用http的错误信息:
下载“http://localhost:10001”时出错。
请求失败,错误信息为:
--
<HTML><HEAD><STYLE type="text/css">#content{ FONT-SIZE: 0.7em; PADDING-BOTTOM: 2em; MARGIN-LEFT: 30px}BODY{MARGIN-TOP: 0px; MARGIN-LEFT: 0px; COLOR: #000000; FONT-FAMILY: Verdana; BACKGROUND-COLOR: white}P{MARGIN-TOP: 0px; MARGIN-BOTTOM: 12px; COLOR: #000000; FONT-FAMILY: Verdana}PRE{BORDER-RIGHT: #f0f0e0 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #f0f0e0 1px solid; MARGIN-TOP: -5px; PADDING-LEFT: 5px; FONT-SIZE: 1.2em; PADDING-BOTTOM: 5px; BORDER-LEFT: #f0f0e0 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #f0f0e0 1px solid; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e5e5cc}.heading1{MARGIN-TOP: 0px; PADDING-LEFT: 15px; FONT-WEIGHT: normal; FONT-SIZE: 26px; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 3px; MARGIN-LEFT: -30px; WIDTH: 100%; COLOR: #ffffff; PADDING-TOP: 10px; FONT-FAMILY: Tahoma; BACKGROUND-COLOR: #003366}.intro{MARGIN-LEFT: -15px}</STYLE><TITLE>服务</TITLE></HEAD><BODY><DIV id="content"><P class="heading1">服务</P><BR/><P class="intro">由于内部错误,服务器无法处理该请求。有关该错误的详细信息,请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回客户端,或在打开每个 Microsoft .NET Framework 3.0 SDK 文档的跟踪的同时检查服务器跟踪日志。</P></DIV></BODY></HTML>
--.
元数据包含无法解析的引用:“http://localhost:10001/”。
没有终结点在侦听可以接受消息的 http://localhost:10001/。这通常是由于不正确的地址或者 SOAP 操作导致的。如果存在此情况,请参阅 InnerException 以了解详细信息。
远程服务器返回错误: (404) 未找到。
如果该服务已在当前解决方案中定义,请尝试生成该解决方案,然后再次添加服务引用。 --------------------编程问答-------------------- _____无解 --------------------编程问答--------------------
引用 19 楼 mq2003hwj 的回复:
_____无解
谢谢啦!!! --------------------编程问答--------------------
引用 11 楼 Linchen_ 的回复:
搞错了,是这位大侠的建议报错
引用 9 楼 mq2003hwj 的回复:<behavior name="MyBehavior">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
先试试


看你的代码, host 放在 using 里, ReadKey 放在 using 外。host 执行到 ReadKey 不就销毁了嘛... --------------------编程问答-------------------- 删除引用,重新生成,再引用。OK
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,