标签: nettcpbinding

无法获取在Fiddler中显示的netTcpBinding请求

我有一个有两个端点的WCF服务.一个使用basicHttpBinding,另一个使用netTcpBinding.这是我的配置......

<services>
      <service name="SomeService.Service">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration=""
          name="EndPointHttp" contract="SomeService.IService" />
        <endpoint address="" binding="netTcpBinding" bindingConfiguration=""
          name="EndPointTcp" contract="SomeService.IService" />
        </service>
</services>
Run Code Online (Sandbox Code Playgroud)

但是,当我使用该服务时,我试图比较两个请求之间的差异.所以我正在运行小提琴手去做这件事.我可以在Fiddler中看到basicHttpBinding请求,但我无法显示net.tcp://请求.我该怎么做才能看到这种流量?

c# wcf fiddler nettcpbinding

11
推荐指数
2
解决办法
8951
查看次数

如何正确关闭客户端代理(远程主机强行关闭现有连接)?

在你将问题读到最后之前,请不要关闭.我已经谷歌搜索了几个小时没有成功.


编辑:现在我确信它与WCF缓存打开TCP连接(连接池)的方式有关.请在问题结尾处查看编辑#5.


我基本上有一个使用netTcpBinding配置的WCF服务.即使我正常关闭客户端代理(请参阅下面的代码),服务器也始终记录" System.Net.Sockets.SocketException (0x80004005): An existing connection was forcibly closed by the remote host".

我已经将问题缩小到我能写的最基本的WCF示例.我每次关闭客户端应用程序时都会在WCF跟踪生成的日志中获得异常.我在自己的代码中没有得到任何异常,这意味着它按预期工作,我无法调试任何东西,看看WCF在我的日志中添加错误出了什么问题.

服务接口/实现:

[ServiceContract]
public interface IService1
{
    [OperationContract]
    string DoWork();
}
...
public class Service1 : IService1
{
    public string DoWork()
    {
        return "12";
    }
}
Run Code Online (Sandbox Code Playgroud)

服务器端配置:

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <services>
      <service name="WebApplication1.Service1">
        <endpoint …
Run Code Online (Sandbox Code Playgroud)

.net c# wcf tcp nettcpbinding

11
推荐指数
1
解决办法
5010
查看次数

没有Windows凭据的netTcpBinding?

我有一个机器控制应用程序,我有一台客户端计算机和五个服务器盒在机器子网上进行通信.没有域控制器.我想使用netTcpBinding来提供可靠性和事务支持.

当域控制器不存在时,是否可以使用此绑定进行用户名/密码验证?我不想使用证书,因为我不想管理900台计算机(150台机器)上的证书,这些计算机不会连接到办公室局域网.

wcf credentials nettcpbinding

9
推荐指数
1
解决办法
7591
查看次数

如何找到NetTcpBinding(WCF)免费的TCP端口(因此服务器可以绑定到它)

在.Net中找到下一个TCP端口,说明如何在原始.net中执行此操作,但不知道如何使用WCF安全地执行此操作.

在我的单元测试中,我需要使用NetTcpBinding,我不希望硬编码它正在使用的端口.

因此,如何在我的ServiceHost中使用NetTcpBinding时自动选择一个空闲端口?

我怎样才能告诉我它选择的端口(或完整端点地址)?

或者我如何使用.NET找到一些对服务器有效的端口?


鉴于我的赏金没有带来任何新答案,我认为我们可以假设没有好的答案.

.net wcf unit-testing tcp nettcpbinding

9
推荐指数
2
解决办法
4837
查看次数

WCF - 将频道打开很长时间是不好的做法吗?

我只是在学习围绕WCF的绳索.我打算做的是使用NetTcpBinding在客户端和服务器之间打开双工通道,并使其无限期保持打开状态,以便服务器可以向客户端发起请求.

然后我偶然发现了Jesse Ezell撰写的这篇博客,这似乎表明保持渠道无限期开放是一件坏事,因为你无法发现错误,这会造成各种不稳定因素.

那是对的吗?如果我使用NetTcpBinding并在关系的任何一侧保持对开放通道的引用,那么如果通信失败会发生什么?我如何捕捉失败事件?还有其他什么问题?您使用的.NET框架有什么区别吗?(我在4.0.)

c# wcf .net-4.0 nettcpbinding

9
推荐指数
2
解决办法
7061
查看次数

使用netTcpBinding为WCF服务启用基于证书的身份验证

我有一个WCF服务,使用netTcpBinding的单个端点公开,它位于服务器A上,托管在我们域上的内部LAN上的IIS7.5/WAS上.

然后,此服务由位于服务器B上的ASP.NET Web客户端应用程序使用,该应用程序也在IIS7.5上托管,在我们的域外部具有外部托管提供商,并通过VPN连接到我们的LAN,仅允许服务器A之间的流量和服务器B.

在开发期间,当我测试这个概念时,我在我们域内的另一个IIS服务器上运行了Web客户端应用程序,使用绑定安全性mode="Transport"和传输clientCredentialType="Windows"工作正常.

然后我将Web客户端应用程序移动到外部服务器B,以进一步进行概念验证测试,设置绑定安全性mode="None",显然这个服务器在我们的域之外,我不能使用Windows身份验证,它仍然可以正常工作.

我现在需要做的是,启用切换回使用传输安全性是设置clientCredentialType="Certificate",因为你不能拥有传输安全性clientCredentialType="None".

这就是我开始失败的地方.我似乎围绕web.config着服务和客户端web.config在哪里定义证书以及在哪里存储证书的哪些部分.

基本上我要做的是验证服务器B确实是服务器B调用服务器A上的服务,从而防止任何欺骗或DNS颠覆问题,这可能导致服务器A上的服务被非法访问.

我的想法是我需要为服务器B创建一个证书,服务器A持有公钥来验证它?如果是这种情况,则服务器B已经安装了通配符SSL证书,因为它为我们的子域提供了各种应用程序.此证书可以用于WCF身份验证吗?

我发现的SO问题似乎都没有涵盖这一点,我发现的所有各种网站和书籍例子都不是那么清楚.它起初看起来像WCF配置有点像黑色艺术.

这都是使用.NET 4和Visual Basic构建的.任何帮助将不胜感激.

authentication wcf .net-4.0 nettcpbinding x509certificate

9
推荐指数
1
解决办法
8306
查看次数

使用netTcpBinding时,在WCF中实现加密的最简单方法是什么?

我正在实现一个WCF服务,将在私有LAN中使用(部分).

我将使用netTcpBinding并希望在通信上实现某种形式的安全性,更具体地说,重要的是加密数据以便(例如)没有人可以查看通过网络传输的数据.

我不认为Windows身份验证是合适的,因为最终用户可能无法严格维护其Windows登录和角色以将其用作身份验证.我认为这会使它不恰当吗?如果我错了,请纠正我.

我的问题是,使用netTcpBinding在WCF服务中实现加密的最简单方法是什么?特别是当Windows凭据类型不可用时.

我已经尝试过使用证书进行试验(使用makecert生成我自己的证书)但是明显缺乏教程和文档,描述了如何使用TCP从头到尾完成此操作并在IIS之外的其他东西中托管服务.他们中的很多人都会详细介绍如何生成证书(并且这些教程中没有两个在这方面完全相同)并通过说出类似的内容来完成

使用这些来签署服务和客户端

......不幸的是,这是我需要进一步澄清的过程!

一般来说,证书解决方案似乎超过顶部,而且只是为了实现加密数据而有点过分!

在我可能做出的任何假设中的任何帮助或更正都将非常感激.

c# security wcf tcp nettcpbinding

8
推荐指数
1
解决办法
572
查看次数

使用Net.TCP托管WCF服务

我是全新的,并尝试使用net.tcp绑定托管最简单的WCF服务我有Windows 7 Professional和IIS7并启用了NON http激活.

  • 我在vs2010中启动了一个新的WCF服务应用程序项目并进行编译.打个招呼!
  • 我删除了所有的IIS网站并添加了一个名为WCFHost的新网站
  • 我打开WcfTestClient.exe并添加 应用程序找到的http://localhost/Service1.svc

Web.config看起来像这样(未触动)

 <system.serviceModel>
    <services>
      <service name="WcfService2.Service1" behaviorConfiguration="WcfService2.Service1Behavior">
        <endpoint address="" binding="wsHttpBinding" contract="WcfService2.IService1">
          <!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WcfService2.Service1Behavior">
          <!-- To avoid disclosing metadata information, set the value below to false and remove …
Run Code Online (Sandbox Code Playgroud)

wcf nettcpbinding

8
推荐指数
2
解决办法
2万
查看次数

WCF服务通道中的CommunicationObjectAbortedException,同时加载多个数据

我在我的客户端 - 服务器应用程序中使用WCF服务,我在服务器和客户端之间的通信时遇到跟随错误.

Error Message =>> System.ServiceModel.CommunicationObjectAbortedException: The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it has been Aborted.

Server stack trace: 
   at System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrNotOpen()
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at ServiceLib.ServiceCallbackInterfaces.IHostServiceCallback.SendEventAndStatus(String message, Boolean isBackupGenerated)
   at ServiceLib.Services.DriversService.objDriver_EventReceived(Object sender, EventReceivedEventArgs e)
Run Code Online (Sandbox Code Playgroud)

应用场景:客户端通过WCF服务从服务器获取数据并使用nettcp绑定.服务器与真实设备连接,每秒生成20-30个事件.使用WCF的回调接口将生成的事件作为字符串消息推送到所有连接的客户端.如果客户端没有任何进程负载(只接收事件和显示),它工作正常.但是当我们在客户端进行一些加载过程并且忙碌一段时间时,它会出错.

注意:我已经在nettcp绑定中设置了最大所有超时,如下所示,但仍然没有解决问题.

NetTcpBinding tcpBinding = new NetTcpBinding(SecurityMode.None); …
Run Code Online (Sandbox Code Playgroud)

c# wcf nettcpbinding

8
推荐指数
1
解决办法
1万
查看次数

ZeroMQ可以用来接受传统的套接字请求吗?

我正在尝试使用ZeroMQ重新编写一个旧服务器,现在我有以下服务器设置(适用于Zmq请求):

    using (var context = ZmqContext.Create())
    using (var server = context.CreateSocket(SocketType.REP)) {
        server.Bind("tcp://x.x.x.x:5705");

        while (true) { ... }
Run Code Online (Sandbox Code Playgroud)

如果我使用Zmq客户端库进行连接,这种设置可以正常工作 context.CreateSocket(SocketType.REQ)

但不幸的是,我们有很多需要连接到这个服务器的遗留代码,而套接字是使用.net socket libs创建的:

    Socket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
    Socket.Connect(ipAddress, port);
Run Code Online (Sandbox Code Playgroud)

有没有办法编写ZeroMQ服务器来接受这些传统的.net套接字连接?

sockets tcp nettcpbinding zeromq

8
推荐指数
1
解决办法
1万
查看次数