标签: nettcpbinding

Catch-22防止WIF保证流式TCP WCF服务; 毁了我的圣诞节,心理健康

我需要使用WIF保护流式WCF net.tcp服务端点.它应该对我们的令牌服务器验证传入呼叫.该服务是流式传输的,因为它旨在传输大量数据.

这似乎是不可能的. 如果我无法绕过捕获物,我的圣诞节将被毁掉,我会在阴沟里喝水,而快乐的购物者则会越过我缓慢冷却的身体.手提箱严重,你们.

为什么这不可能?这是Catch-22.

在客户端上,我需要使用我从令牌服务器获取的GenericXmlSecurityToken创建一个通道.没问题.

// people around here hate the Framework Design Guidelines.
var token = Authentication.Current._Token;
var service = base.ChannelFactory.CreateChannelWithIssuedToken(token);
return service.Derp();
Run Code Online (Sandbox Code Playgroud)

我说"没问题"吗?Problemo.事实上,NullReferenceException风格问题.

"兄弟,"我问框架,"你甚至无效检查吗?" 框架是沉默的,所以我拆开并发现了

((IChannel)(object)tChannel).
    GetProperty<ChannelParameterCollection>().
    Add(federatedClientCredentialsParameter);
Run Code Online (Sandbox Code Playgroud)

是异常的来源,并且GetProperty呼叫正在返回null.那么,WTF?事实证明,如果我打开Message安全性并将客户端凭据类型设置为,IssuedToken那么此属性现在存在于ClientFactory(protip:IChannel中没有"SetProperty"等效,即混蛋).

<binding name="OMGWTFLOL22" transferMode="Streamed" >
    <security mode="Message">
        <message clientCredentialType="IssuedToken"/>
    </security>
</binding>
Run Code Online (Sandbox Code Playgroud)

甜.没有更多的NRE.然而,现在我的客户在出生时出现了故障(仍然爱他,所以).通过WCF诊断进行挖掘(protip:让你的最坏的敌人在击碎它们并在你面前驾驶它们之前做到这一点,但在享受他们的女人和孩子的悲伤之前),我看到它是因为服务器和客户端之间的安全性不匹配.

'net.tcp:// localhost:49627/MyService'不支持请求的升级.这可能是由于绑定不匹配(例如在客户端而不是在服务器上启用安全性).

检查主机的诊断(再次:压碎,驱动,读取日志,享受哀叹),我看到这是真的

协议类型application/ssl-tls已发送到不支持该类型升级的服务.

"好吧,自我,"我说,"我只是打开主机上的Message安全性!" 我做到了. 如果你想知道它的样子,它就是客户端配置的精确副本.抬头.

结果: Kaboom.

绑定('NetTcpBinding',' http://tempuri.org/ ')支持不能与消息级安全性一起配置的流.考虑选择不同的传输模式或选择传输级别安全性.

因此,我的主机不能通过令牌进行流式传输和保护.第二十二条军规.

tl; dr:如何使用WIF保护流式net.tcp WCF端点???

c# wcf nettcpbinding wif .net-4.5

181
推荐指数
1
解决办法
5269
查看次数

什么是在IIS7中使用WAS时的global.asax Application_Start等价物

我想将netTcpBinding用于我目前在IIS7中托管的WCF应用程序,这意味着将其配置为使用WAS.这是相当直接的,但是,我的应用程序以前在global.asax文件中使用了Application_Start事件.我不需要访问httpContext(我理解IIS7中已经删除了访问权限),但我还是想挂钩启动或初始化方法?

在WAS中托管与IIS7相关的应用程序时是否存在等价物?

使用经典模式不是一个选项(我再次对httpcontext不感兴趣,如果使用http绑定,这似乎只能起作用) - 我已经看到了一个将静态类插入app_code文件夹的示例,该文件夹看起来像一个可怕的黑客.

wcf iis-7 was nettcpbinding global-asax

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

检测WCF双工合同中的客户端死亡

我正在尝试构建一个SOA,客户端可以在服务器上执行长时间运行的查询,服务器使用回调进行响应.

我希望能够检测客户端是否断开连接(通过用户启动的关闭,未处理的异常或丢失网络连接),以便服务器可以选择取消昂贵的请求.

我正在测试各种故障情况,但我似乎无法启动某些事件处理程序.

经过测试的失败案例:在请求后杀死客户端进程.使用像CurrPorts这样的程序来关闭TCP连接.

测试代码:

using System;
using System.ServiceModel;
using System.Threading;

namespace WCFICommunicationObjectExperiments
{
    class Program
    {
        static void Main(string[] args)
        {
            var binding = new NetTcpBinding(SecurityMode.None);

            var serviceHost = new ServiceHost(typeof (Server));
            serviceHost.AddServiceEndpoint(typeof (IServer), binding, "net.tcp://localhost:5000/Server");
            serviceHost.Open();
            Console.WriteLine("Host is running, press <ENTER> to exit.");
            Console.ReadLine();
        }

    }

    [ServiceContract(CallbackContract = typeof(IClient))]
    public interface IServer
    {
        [OperationContract]
        void StartProcessing(string Query);
    }

    public interface IClient
    {
        [OperationContract]
        void RecieveResults(string Results);
    }

    [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class Server : IServer
    {

        public void …
Run Code Online (Sandbox Code Playgroud)

c# wcf duplex callback nettcpbinding

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

WCF可靠会话的目的是什么?

围绕此主题的文档很差.我使用WCF服务与Windows服务中托管的NetTcpBinding.问题是会话在处于非活动状态一段时间后被删除.我需要的是永远活着的会话.WCF可靠的会话有什么帮助吗?或者我可以玩超时设置?

wcf nettcpbinding

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

WCF NetTcpBinding安全性 - 它是如何工作的?

我正在遇到以下问题,试图解决WCF中的设置陷阱...

我使用NetTcp绑定创建了WCF客户端 - 服务器服务.我没有对安全设置进行任何更改,当在一台机器上运行时,它运行得非常好.但是,当我从另一台机器运行我的客户端时,它抱怨服务器不喜欢发送的安全凭证.

现在明白NetTCP默认是"安全的",我的客户端会将错误的安全细节 - 即Windows用户名和密码(或某种形式的域身份验证)传递给我的服务器,因为它们没有运行在它不会喜欢的相同域名.

但是,我不明白的是:

我没有在绑定中指定任何安全性 - 标准设置是否需要发送Windows用户名或密码?

我没有在我的服务器上安装任何证书 - 我知道NetTCP绑定需要某种形式的公共私钥来保护凭证 - 但这似乎在客户端和服务器都在同一台机器上时有效 - 数据是如何获得的加密?或者想要它,因为WCF知道它在同一台机器上并且不需要加密?

我不得不将我的客户端和服务器上的安全模式设置为"none",并且它们连接得很好.但有没有办法在没有证书的情况下加密我的数据?

最后......传输和邮件安全有什么区别?

为了检查我的理解(请原谅!),如果我从A人发送了一封信给人B,并且我对我的手写进行编码,以确保如果有人截获它,他们就无法阅读它了.运输安全是指我决定通过武装运输发送我的信件,以便沿途没有人可以使用它?

是否可以在没有证书的情况下在WCF中进行任何形式的加密?我的项目是一个私人项目,我不想购买证书,数据也不是那么敏感,所以这只是为了我自己的知识.

security wcf binding credentials nettcpbinding

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

WCF TCP比HTTP快多少

我知道TCP对于WCF比HTTP更快,但我很想知道多少.我对使用HTTP的大型应用程序存在性能问题,并且正在考虑转向netTcp是否会产生足够的性能提升以使投资变得有价值.

有谁知道netTCP发送的数据与Http绑定相比有何不同?

c# wcf nettcpbinding

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

流传输+ netTcpBinding =不支持成帧模式?

任何人都可以解释这个错误意味着什么:

blah blah yadda不支持使用.Net框架模式

我找不到任何有价值的信息.例外情况是检查服务器日志,但是我找不到与此错误相关的任何内容.我不知道什么是"框架模式",否则我会尝试不同的框架模式.

我要做的是创建一个TCP WCF端点以将Stream发送到客户端.


这是界面(原型):

[ServiceContract]
public interface IXpsService
{
    [OperationContract]
    Stream GetCurrentDocument();
}
Run Code Online (Sandbox Code Playgroud)

wcf nettcpbinding

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

netTcpBinding或wsHttpBinding

我有一个托管为Windows服务的WCF服务,客户端是一个使用WCF服务方法的ASP.Net应用程序.

在实施安全性的过程中,我很困惑哪个netTcpBinding/ 哪个wsHttpBinding适合我的情况.

很可能场景中的所有应用程序(WCF服务,Windows服务,ASP.Net网站)都将位于我们办公室的不同服务器上,因此位于Intranet中.用户可以通过Internet访问ASP.Net网站.

虽然,我总是可以在这里使用wsHttpBinding,它是否适合netTcpBinding在我的情况下设置服务端点?

wcf wcf-binding wshttpbinding nettcpbinding

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

你能在代码中做NetTcpBinding吗?你应该?

WCF newbie here ...我正在尝试使用NetTcpBinding自托管WCF服务.基于MSDN"操作方法"教程,我已经完成了代码中的所有绑定,然后我将其从WsHttpBinding更改为NetTcpBinding,现在看起来像这样:

var baseAddress = new Uri("net.tcp://localhost:8000/MyWebService");
var selfHost = new ServiceHost(typeof(ConcreteWebService), baseAddress);
try {
  var binding = new NetTcpBinding();
  binding.Security.Mode = SecurityMode.Message;
  selfHost.AddServiceEndpoint(typeof(IWebService), binding, "TRWebService");
  selfHost.Open();
  Console.WriteLine("The service is ready at {0}", baseAddress.AbsoluteUri);
  Console.WriteLine("Press <ENTER> to terminate service.");
  Console.WriteLine();
  Console.ReadLine();

  selfHost.Close();
} catch (CommunicationException ce) {
  Console.WriteLine("An exception occurred: {0}", ce.Message);
  selfHost.Abort();
}
Run Code Online (Sandbox Code Playgroud)

事实是,教程然后说你必须运行svcutil.exe来为客户端生成代理...但是由于我切换到NetTcpBinding,svcutil不再工作 - 无法检测我的服务.我搜索了这个问题,发现NetTcpBinding的每一个例子都在app.config文件中进行设置,而不是在代码中,并且它们都添加一个名为"Mex"的端点,绑定类型为"mexTcpBinding".在代码中似乎没有任何等效的东西.

那么,我是否必须更改我的项目以使用app.config,并放弃基于代码的方法?任何人都可以向我解释Mex是什么,为什么我需要它,以及为什么它(显然)不能在代码中调用 - 或者它是否可以,如何或为什么不鼓励?一般来说,何时使用app.config以及何时使用WCF服务代码更好?

c# wcf nettcpbinding

13
推荐指数
1
解决办法
8601
查看次数

使用netTcp绑定时添加服务引用

我有一个WCF服务,我通过将其接口复制到示例客户端项目来测试.
现在我想通过添加服务引用来正常工作.
该服务托管在Windows托管(使用installUtil)中.
该服务有2个项目 - 外部(接口+数据交换)和内部(实现).
由于某种原因,它没有app.config所以我手动添加了一个:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="ExecutionService" behaviorConfiguration="Default">
        <endpoint name="TCPEndpoint" address="" binding ="netTcpBinding" contract="Externals.IExecutionService"/>
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:3040/ExecutionService"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Default">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)

尝试从我的示例客户端添加服务引用会导致以下错误:

Metadata contains a reference that cannot be resolved: 'net.tcp://localhost:3040/ExecutionService/Externals.IExecutionService'.
There was no endpoint listening at net.tcp://localhost:3040/ExecutionService/Externals.IExecutionService that could accept the message. This is often caused by an incorrect address or SOAP …
Run Code Online (Sandbox Code Playgroud)

wcf nettcpbinding windows-hosting

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