对同一WCF服务的不同请求的不同超时 - c#

我有一个带有https绑定和回调的WCF服务。该服务在客户端中作为服务引用被引用。超时是在服务和客户端的配置文件中定义的。

我需要使用比其他函数使用的默认值小的超时值来调用服务中的一个函数。

我的客户的代码如下所示

MyService.MyServiceClient myServiceClient = new MyService.MyServiceClient(context);
myServiceClient.GenericSendData("Save Req", serializedString, ServerIdentifier, null);

如何更改客户端/服务器中的代码,以将较小的超时值用于对特定功能的请求?是否可以根据我要调用的函数在代码中指定和更改超时?

参考方案

关于客户端,您可以以编程方式操作绑定并为每个服务客户端实例设置客户端超时。想法是具有不同的绑定配置,然后在ServiceClient构造函数中传递所需的绑定。

这是实例化BasicHttpBinding对象,为第一个服务客户端实例设置30秒超时,然后为下一个服务客户端实例将超时更改为5秒的示例:

var customBinding = new BasicHttpBinding()
{
    ReceiveTimeout = TimeSpan.FromSeconds(30), 
    SendTimeout = TimeSpan.FromSeconds(30),
    CloseTimeout = TimeSpan.FromSeconds(30),
    OpenTimeout = TimeSpan.FromSeconds(30) 
};

var endpointAddress = new EndpointAddress("http://localhost:6670/Service1.svc");

using (var client = new Service1Client(customBinding, endpointAddress))
{
    var data = client.GetData(100);
}

customBinding.OpenTimeout = TimeSpan.FromSeconds(5);
customBinding.CloseTimeout = TimeSpan.FromSeconds(5);
customBinding.SendTimeout = TimeSpan.FromSeconds(5);
customBinding.ReceiveTimeout = TimeSpan.FromSeconds(5);

using (var client = new Service1Client(customBinding, endpointAddress))
{
    var data = client.GetData(101);
}

另外,您可以通过配置来完成:

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_IService1_Shorter" openTimeout="00:00:05"
     closeTimeout="00:00:05"
     sendTimeout="00:00:05"
     receiveTimeout="00:00:05"/>
    <binding name="BasicHttpBinding_IService1_Longer" openTimeout="00:00:30"
       closeTimeout="00:00:30"
       sendTimeout="00:00:30"
       receiveTimeout="00:00:30"/>
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://localhost:6670/Service1.svc" binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_IService1_Longer" contract="ServiceReference1.IService1"
      name="BasicHttpBinding_IService1_Longer" />
  <endpoint address="http://localhost:6670/Service1.svc" binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_IService1_Shorter" contract="ServiceReference1.IService1"
      name="BasicHttpBinding_IService1_Shorter" />
</client>
</system.serviceModel>

然后,您将实例化客户端以使用不同的配置:

 using (var client = new Service1Client("BasicHttpBinding_IService1_Longer"))
 {
     var data = client.GetData(100);
 }

 using (var client = new Service1Client("BasicHttpBinding_IService1_Shorter"))
 {
     var data = client.GetData(101);
 }

关于服务器,不可能,并且也不是一个好主意,每个请求都不能更改正在运行的WCF服务的超时,这是没有意义的。一种可能是使不同的端点覆盖不同的操作,并且每个端点可能具有不同的服务器超时设置。

当我运行python代码时,它说“ <<目前是意外情况” - python

基本上,这是我们合作者的python代码,用于生成网格,该网格是在Linux环境下开发的。我使用Cygwin在Windows上运行此代码。麻烦部分如下。 BiV_temp.geo也是一个python脚本。因此,命令是用预定义的数字和文件名替换脚本BiV_temp.geo中的字符串。os.system('cp BiV_fiber.geo BiV_te…

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

jQuery发布不会将数据发布到ASP.NET API控制器 - javascript

我有一次噩梦般的时间通过jquery post将数据发送到ASP.NET Controller。这是JSON.stringify之后的数据:[{"scheduleTaskID":"203","task":"Permit","baselineDate":…

使用javascript在客户端的列表视图中选择所有复选框 - javascript

我有一个列表视图,在标题中有一个复选框。如果标题复选框已选中/未选中,我想选择行中的所有复选框。如何在客户端实现此目标?这是ListView设计代码。<asp:ListView ID="lvTypes" runat="server" GroupPlaceholderID="groupPlaceHolde…