我们可以通过客户端绑定强制WCF服务器绑定

时间:2015-03-24 10:35:10

标签: c# asp.net wcf iis

这是方案,

我们在应用程序服务器上安装了IIS托管Web服务,现在我们有另一个托管代码的应用程序服务器,并通过创建通道和提供超时绑定来调用IIS托管的Web服务。

现在无论我们在WCF服务器绑定中设置超时值,它们总是被客户端绑定覆盖。 我们是否有办法强制优先处理服务器绑定。特别适用于超时

因为我们使用的K2工作流无法添加服务引用,所以我们无法以这种方式添加服务,我们必须将其添加为dll,然后创建频道,如下面的代码所示,

代码:

 System.Net.NetworkCredential creds = GetCreadentials();
 HttpClientCredentialType credType = creds.httpClientCredentialType;
 BasicHttpBinding binding = new BasicHttpBinding();
 binding.Security.Mode = BasicHttpSecurityMode.Transport;
 binding.Security.Transport.ClientCredentialType = credType;
 EndpointAddress endpoint = new EndpointAddress(Url + "/_vti_bin/FruitFactory/Fruits.svc");
 ChannelFactory<Fruits.Internal.IFruits> factory = new ChannelFactory<Fruits.Internal.IFruits>(binding);
 factory.Credentials.Windows.ClientCredential = creds;
 factory.Credentials.UserName.UserName = creds.UserName;
 factory.Credentials.UserName.Password = creds.Password;
 Fruits.Internal.IFruits proxy = factory.CreateChannel(endpoint);
 proxy.GetFruitCratesData(true);

修改

我知道如何在客户端代码中使用超时绑定,但这是我不想要的,我不希望我的服务使用客户端绑定。

1 个答案:

答案 0 :(得分:-2)

您可以强制客户端使用服务器的设置。但您可以在代码中设置超时

binding.OpenTimeout = new TimeSpan(0, 10, 0);
binding.CloseTimeout = new TimeSpan(0, 10, 0);
binding.SendTimeout = new TimeSpan(0, 10, 0);