0

自己ホスト型の WCF サービスを使用していますが、サービスから少し奇妙な動作が発生しています。 IDispatchMessageInspector の実装を使用して、サービスによって処理された要求/応答を追跡しています。

「サービス参照ダイアログの追加」を使用してサービスを追加すると、すべて正常に機能します。AfterReceivedRequest と BeforeSendReply が発生します。

コードのみを使用してバインディング/エンドポイントを作成すると、サービスは正常に動作しますが、AfterReceivedRequest と BeforeSendReply は起動されません。

誰かが私を正しい方向に向けることができれば、とてもうれしいです。

マルコ。

編集:クライアント作成のコードは次のとおりです。

Public Shared Function Do_RM(ByVal RMParameter As roClsRMParameter) As ROD.RM.Services.RoClsRMResult

    Dim StartAdresse As String
    Dim myBinding As BasicHttpBinding
    Dim oRes As ROD.RM.Services.RoClsRMResult = Nothing

    myBinding = Create_Binding()
    myBinding.OpenTimeout = New TimeSpan(0, 0, TimeOutInSekunden)
    myBinding.SendTimeout = New TimeSpan(0, 0, TimeOutInSekunden)
    StartAdresse = "http://MyServer:8731/BASIC"
    Dim Address = New EndpointAddress(StartAdresse)

    Dim Client = New ROD.RM.Services.RODIS_QS_RMClient(myBinding, Address)
    Client.Endpoint.Contract = Create_ContractDescription()

    Client.Open()
    oRes = Client.DoRM(RMParameter.A_BEL,
                       RMParameter.A_POS,
                       RMParameter.AVO,
                       RMParameter.Qualitaet,
                       RMParameter.Fehlernummer,
                       RMParameter.Anlage,
                       RMParameter.ChargenNr,
                       RMParameter.EinzelRueckmeldung,
                       RMParameter.NurTest,
                       RMParameter.Standort)
    Client.Close()
    Return oRes
End Function

Private Shared Function Create_ContractDescription() As ContractDescription

    Dim oContract As ContractDescription
    oContract = ContractDescription.GetContract(GetType(ROD.RM.Services.IRODIS_QS_RM), GetType(ROD.RM.Services.RODIS_QS_RMClient))
    Return oContract
End Function

Private Shared Function Create_Binding() As BasicHttpBinding

    Dim oHttpBinding As BasicHttpBinding = New BasicHttpBinding()

    oHttpBinding.Name = "BasicHttpBinding_IRODIS_QS_RM"
    oHttpBinding.CloseTimeout = TimeSpan.FromMinutes(1)
    oHttpBinding.OpenTimeout = TimeSpan.FromMinutes(1)
    oHttpBinding.ReceiveTimeout = TimeSpan.FromMinutes(10)
    oHttpBinding.SendTimeout = TimeSpan.FromMinutes(1)
    oHttpBinding.BypassProxyOnLocal = False
    oHttpBinding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard
    oHttpBinding.MaxBufferPoolSize = 524288
    oHttpBinding.MaxReceivedMessageSize = 65536
    oHttpBinding.MessageEncoding = WSMessageEncoding.Text
    oHttpBinding.TextEncoding = Encoding.UTF8
    oHttpBinding.UseDefaultWebProxy = True
    oHttpBinding.AllowCookies = False

    oHttpBinding.ReaderQuotas.MaxDepth = 32
    oHttpBinding.ReaderQuotas.MaxArrayLength = 16384
    oHttpBinding.ReaderQuotas.MaxStringContentLength = 8192
    oHttpBinding.ReaderQuotas.MaxBytesPerRead = 4096
    oHttpBinding.ReaderQuotas.MaxNameTableCharCount = 16384

    Return oHttpBinding
End Function

Inspector of the Service のパーツは次のとおりです。

Imports System.ServiceModel.Description

Public Class roClsRMLogBehavior
    Implements IEndpointBehavior

    Public Sub ApplyDispatchBehavior(ByVal endpoint As _
               System.ServiceModel.Description.ServiceEndpoint, ByVal _
               endpointDispatcher As _
               System.ServiceModel.Dispatcher.EndpointDispatcher) _
        Implements System.ServiceModel.Description.IEndpointBehavior.ApplyDispatchBehavior

        Dim oInspector As roClsRMLog
        oInspector = New roClsRMLog
        endpointDispatcher.DispatchRuntime.MessageInspectors.Add(oInspector)
End Sub

クラス終了

app.Config で:

<extensions>
  <behaviorExtensions>
    <add name="roClsRMLogBehavior" type="RODIS_QS_BUCHEN_SERVICE.roclsRMLogBehaviorExtensionElement, RODIS_QS_BUCHEN_SERVICE, Version=1.1.3.1,Culture=neutral,PublicKeyToken=null"/>
  </behaviorExtensions>  
</extensions>
4

0 に答える 0