gpt4 book ai didi

wcf - 需要帮助将 WCF netTcpBinding 转换为 CustomBinding

转载 作者:行者123 更新时间:2023-12-04 13:49:33 24 4
gpt4 key购买 nike

我需要帮助将以下 netTcpBinding 转换为等效的 CustomBinding:

<bindings>
<netTcpBinding>
<binding name="secureNetTcp" openTimeout="00:00:25" closeTimeout="00:00:27" receiveTimeout="00:10:10" sendTimeout="00:01:00"
listenBacklog="50" maxBufferPoolSize="2097152" maxBufferSize="2097152" maxConnections="50" maxReceivedMessageSize="2097152">
<readerQuotas maxArrayLength="2097152" />
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="true" />
<security mode="TransportWithMessageCredential">
<message algorithmSuite="Basic256Sha256" />
</security>
</binding>
</netTcpBinding>
</bindings>

我主要在自定义绑定(bind)的安全部分苦苦挣扎,因为我无法理解所有不同的设置。并且所有东西的命名似乎也不同(与 netTcpBinding 参数相比)。

如有必要,我还将提供以下信息:
服务端点通过 serviceBehavior 附加了一个证书。
在我的代码中,我在创建代理时提供了用户名/密码(服务行为在 serviceCredentials 下有 <userNameAuthentication userNamePasswordValidationMode="Windows" />;对于 netTcpBinding,WCF 配置编辑器显示 ClientCredentialType=Windows,我猜这是默认值)。

更新:

我为我的主要问题找到了一个潜在的解决方案——增加 ChannelInitilizationTimeout——而无需创建 CustomBinding。我会分享这个,以防有人在谷歌搜索时偶然发现这个线程......

我所做的是创建一个继承自 的自定义类。 NetTcpBinding 并在它的构造函数中使用反射来设置 ChannelInitilizationTimeout 属性。从而保持与 NetTcpBinding 的完全兼容性。

这是我的自定义类的代码:
public class MyNetTcpBinding : NetTcpBinding
{
public MyNetTcpBinding()
{
var fi = typeof(NetTcpBinding).GetField("transport", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
var val = (System.ServiceModel.Channels.TcpTransportBindingElement)fi.GetValue(this);
val.ChannelInitializationTimeout = TimeSpan.FromSeconds(10);
}
}

public class MyBindingElement : NetTcpBindingElement
{
protected override Type BindingElementType
{
get { return typeof(MyNetTcpBinding); }
}
}

public class MyBindingElementCollection : StandardBindingCollectionElement<MyNetTcpBinding, MyBindingElement>
{
}

编译完这个类(我为这个类创建了一个单独的 DLL 项目)后,我使用了 WCF 配置编辑器(在左 Pane 下“配置”-> 高级-> 扩展-> 绑定(bind)扩展-> 新建-> 命名,例如。” MyNetTcp ” 并指向 dll 文件)将我的类添加为绑定(bind)的扩展。

然后在 WCF app.config 中替换 netTcpBindingMyNetTcp (共有三个引用;一个在 <service><endpoint binding="netTcpBinding"></endpoint></service>; 中,另外两个是 <bindings><netTcpBinding></netTcpBinding></bindings> 下的 xml 标签)。

如果有人想对原始问题给出正确答案,我将保留此问题...

最佳答案

您可以将 netTcpBinding 传入自定义绑定(bind)并执行以下操作。
不能保证反射将跨版本工作。

http://blogs.msdn.com/b/sajay/archive/2010/01/29/how-to-create-a-custom-binding-from-a-standardbinding.aspx

关于wcf - 需要帮助将 WCF netTcpBinding 转换为 CustomBinding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9220328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com