自己ホスト型の 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>