1

WCF を使用して MSMQ キューに送受信しようとすると、次のエラーが表示されます。

「メッセージ内に送信者の SID が見つからなかったため、メッセージ セキュリティ コンテキストの作成に失敗しました。メッセージを受信できません。WindowsDomain MsmqAuthenticationMode には、送信者の SID が必要です。」

これにより、すべてのメッセージが失敗し、別の有害なキューに移動します。受信側のサービスでエラーが発生しているようです。

クライアント構成は次のとおりです。

<netMsmqBinding>
    <binding name="OrderServiceMsmqBinding"
              durable="true"
              exactlyOnce="true"
              maxReceivedMessageSize="2147483647"
              maxRetryCycles="1"
              receiveErrorHandling="Move"
              receiveRetryCount="1"
              retryCycleDelay="00:0:05"
              deadLetterQueue="Custom"
              customDeadLetterQueue="net.msmq://localhost/private/Services.DeadOrderListenerService/DeadOrderListenerService.svc"                  
              useMsmqTracing="true">
      <security mode="None" />
      <readerQuotas maxStringContentLength="2147483647" />
    </binding>
  </netMsmqBinding>

としても:

<client>
      <endpoint address="net.msmq://localhost/private/Services.OrderPlacementProviderService/OrderPlacementProviderService.svc" binding="netMsmqBinding" bindingConfiguration="OrderServiceMsmqBinding" contract="Providers.IOrderPlacementService" name="orderingMsmqEndpoint" />
</client>

受信サービスはほぼ同じように構成されています。

<netMsmqBinding>       
        <binding name="OrderServiceMsmqBinding"
                 durable="true"
                 exactlyOnce="true"                 
                 maxReceivedMessageSize="2147483647"                      
                 maxRetryCycles="1"
                 receiveErrorHandling="Move"
                 receiveRetryCount="1"
                 retryCycleDelay="00:0:05"
                 deadLetterQueue="Custom"                 customDeadLetterQueue="net.msmq://localhost/private/Services.DeadOrderListenerService/DeadOrderListenerService.svc"
                 timeToLive="00:01:00"
                 useActiveDirectory="false"
                 useMsmqTracing="true">
          <readerQuotas maxStringContentLength="2147483647" />
        </binding>
      </netMsmqBinding>

と:

<service name="Services.OrderPlacementProviderService" behaviorConfiguration="OrderServiceBehavior">
        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" name="MexOrderService" contract="IMetadataExchange" />
        <endpoint address="net.msmq://localhost/private/Services.OrderPlacementProviderService/OrderPlacementProviderService.svc" binding="netMsmqBinding" bindingConfiguration="OrderServiceMsmqBinding" contract="Providers.IOrderPlacementService" name="msmqEndpoint" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost/Services.OrderPlacementProviderService" />
          </baseAddresses>
        </host>
      </service>

キューは認証されておらず、当面の間、Everyone へのアクセスが許可されています。この SID の問題は発生し始めたばかりです。さまざまな環境で一貫して発生するため、何かを間違って構成したと思いますか?

いくつかの詳細情報: クライアントは次のように (キューに) 注文します。

 using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
 {
      _orderPlacementClient.PlaceOrder(basket, transactionRef, user);       
      scope.Complete();
 }     

リスニング サービスは次のようになります。

[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
    public void PlaceOrder(BasketDTO basket, string transactionReference, UserDTO user)
    {
        _log.Info("Order placed: " + transactionReference + " for user " + user.Id);
        try 
        {
            _prov.PlaceOrder(basket, transactionReference, user);                
        }
        catch (Exception ex)
        {
            _log.Error("Error placing order", ex);
        }           
    }
4

0 に答える 0