小编jon*_*nho的帖子

System.Net.Http.HttpRequestException将内容复制到流时出错

我在.Net 4.5.2框架中使用HttpClient类.我正在对第三方Web服务进行PostAsync.这篇文章80%的时间都在工作,20%的时间我们的回复被缩短了.在这种情况下,我们得到以下异常:

System.Net.Http.HttpRequestException:将内容复制到流时出错.---> System.IO.IOException:无法从传输连接读取数据:远程主机强制关闭现有连接.---> System.Net.Sockets.SocketException:远程主机在System.Net.Sockets.NetworkStream.BeginRead(Byte []缓冲区,Int32偏移量,Int32大小,AsyncCallback回调,对象状态)强制关闭现有连接---内部异常堆栈跟踪的结束---在System.Net.FixedSizeReader.StartReading()的System.Net.Sockets.NetworkStream.BeginRead(Byte []缓冲区,Int32偏移量,Int32大小,AsyncCallback回调,对象状态)在System.Net.Security._SslStream.StartFrameHeader(字节[]缓冲液,的Int32偏移的Int32计数,AsyncProtocolRequest asyncRequest)在System.Net.Security._SslStream.StartReading(字节[]缓冲液,的Int32偏移的Int32计数,

随后的相同请求成功.这不是我们可以重新设置的请求,因为已经放置了业务.所以它让我们处于一种尴尬的境地.

这是我的代码:

using (var httpClient = new HttpClient())
{
    httpClient.DefaultRequestHeaders.Authorization = authorizationHeader;
    HttpContent httpContent = new StringContent(someXml);

    //Exception occurs on next line...
    var response = await httpClient.PostAsync("https://thirdpartyendpoint", httpContent);
    var responseXml = await response.Content.ReadAsStringAsync();  
    //convert to Dto              
}
Run Code Online (Sandbox Code Playgroud)

第三方服务成功地将记录保存到他们的数据库中,并且在他们的结尾没有看到任何明显的例外.他们确实注意到,写入数据库的失败请求通常需要比成功请求更长的时间(大约18-30秒).

谢谢您的帮助

.net c# asp.net asp.net-web-api

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

服务总线1.0和WCF NetMessagingBinding - 令牌提供程序无法提供安全令牌

我正在使用Service Bus for Windows Service 1.0(客户端引用Microsoft.ServiceBus.dll 1.8.0.0)

我试图让WCF客户端和服务NetMessagingBinding示例工作.

我只想向服务总线提交一条消息,并将其输出到我的wcf服务中.

目前我提交时遇到问题,因为它无法找到令牌提供程序:

我有以下代码:

  private const string Issuer = "myIssuerName";
  private const string Key = "BBBBBB=";
  private static readonly Uri ServiceBusEndpointAddress =
        new Uri("{sb://servicebusdefaultnamespace.servicebus.windows.net/Orders/}");

  private static void Main(string[] args)
    {
        //SetUp
        var binding = new NetMessagingBinding();
        var contract = ContractDescription.GetContract(typeof (IOrderService), typeof (OrderService));

        var transportBehavior = new TransportClientEndpointBehavior();
        transportBehavior.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(Issuer, Key);

        var endpoint = new ServiceEndpoint(contract, binding,
                                           new EndpointAddress(ServiceBusEndpointAddress.AbsoluteUri));
        endpoint.Behaviors.Add(transportBehavior);

        var host = new ServiceHost(typeof (OrderService), ServiceBusEndpointAddress);
        host.AddServiceEndpoint(endpoint);

        host.Open();


        //send message to …
Run Code Online (Sandbox Code Playgroud)

wcf servicebus azure

5
推荐指数
1
解决办法
6099
查看次数

react/flux-子组件用户事件 - 应该通过调度程序路由所有内容

我正在研究一种使用助焊剂和反应的简单原型.以前当我使用React时,我已经将子组件中的事件发送到其父组件(已在子组件上注册了prop回调),然后在父组件中更改了状态.

遵循Flux架构是否应通过Dispatcher提升所有事件?例如,即使是一个简单的用户事件,例如选中复选框,也应通过此链引发:

  1. 在组件事件处理程序中创建一个操作
  2. 发送给调度员
  3. 调度员发送到商店
  4. store将更改事件发送到控制器视图
  5. 控制器视图回调到商店以获取更改

谢谢

javascript flux reactjs reactjs-flux

5
推荐指数
1
解决办法
373
查看次数

Web API动作过滤器 - Controller.TempData等效?

在我的System.Web.Mvc Action过滤器中,我以前使用TempData来存储我的unitOfWork服务的实例,如下所示:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    filterContext.Controller.TempData[UnitOfWorkRequestKey] = UnitOfWork;
    UnitOfWork.Begin();
}
Run Code Online (Sandbox Code Playgroud)

然后提交事务我从像这样的临时数据中检索它.

public override void OnActionExecuted(ActionExecutedContext filterContext)
{
    var unitOfWork = (IUnitOfWork)filterContext.Controller.TempData[UnitOfWorkRequestKey];
    try
    {
        if (filterContext.Exception == null)
        {
            unitOfWork.Complete();
        }
    }
    finally
    {
        unitOfWork.Dispose();
        filterContext.Controller.TempData[UnitOfWorkRequestKey] = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:
System.Web.HttpWeb Api Action Filter(使用HttpActionContext)中 - 是否有一个等效的位置来存储我的服务实例,所以我可以在执行该操作时检索相同的实例?

c# asp.net-mvc-4 asp.net-web-api

4
推荐指数
1
解决办法
9585
查看次数

最合适的设计模式来实现流程图/模型

我必须在C#中实现流程图结构.我将数据传递给第一个节点,它将检查一些数据项(布尔值),然后将数据路由到两个后续节点之一,依此类推.
基本逻辑流程如下:

  1. 节点1

    • 如果颜色为红色goto节点2
    • 否则转到节点3
  2. 节点2

    • 如果重量10则转到节点4
    • 否则转到规则5
  3. 节点3

    • 如果大小大,那么转到节点6
    • 否则转到节点10

等等

我一直在关注责任链模式,它最初似乎解决了我的问题.但是,在我的大多数节点(处理程序)中,我需要有2个后续节点(真实路径和错误路径)才能进行调用.

看一下CoR模式的实现,似乎有一个NextHandler(Next Node)的概念,但不是NextHandlerA和NextHandlerB的概念.

因此,如果不是CoR哪种模式更适合解决这个问题.规则和顺序可能经常变化.

谢谢你的时间.

c# design-patterns chain-of-responsibility c#-4.0

4
推荐指数
1
解决办法
1932
查看次数

装饰者装饰基地命令

我正在使用SimpleInjector 2.2.3.0.

我有一个MVC 4.0项目,并使用我的命令周围的装饰模式来管理我的UnitOfWork和我的授权.我有授权的装饰师 - IAuthorisationDecorator.这包裹了我的所有ITransactionalCommandHandlers.(每个ITransactionalCommandHandler也都装饰着IUnitOfWorkDecorator.)授权装饰器如下所示:

public void Handle(TCommand command)
{
    //authorise this command for this Iprincipal

    decoratedCommandHandler.Handle(command);
}
Run Code Online (Sandbox Code Playgroud)

我现在想要创建一个INonTransactionalCommandHandler(不需要NHibernate会话,它只是做一些文件IO).注意INonTransactionalCommandHandlerITransactionalCommandHandler继承ICommandHandler- 看起来像这样:

 public interface ICommandHandler<in TCommand, out TResult>
 {
     TResult Result { get; }
     void Handle(TCommand command);
 }
Run Code Online (Sandbox Code Playgroud)

我真的不想创建两个相同的AuthorisationDecorators(事务性/非事务性).因为最终它们装饰了一个基础ICommandHandler(实现为a ITransactionalINonTransactional).

所以我的问题是 - 有没有办法创建一个装饰基础的装饰器ICommandHandler- 但是容器知道要把它投射ICommandHandler到一个ITransactionalCommandHandler或一个INonTransactionalCommandHandler.有没有办法做到这一点?

c# dependency-injection simple-injector asp.net-mvc-4

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