Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#在invoke的返回值为null时捕获soap消息_C#_Wcf_Web Services_Soap_Attributes - Fatal编程技术网

C#在invoke的返回值为null时捕获soap消息

C#在invoke的返回值为null时捕获soap消息,c#,wcf,web-services,soap,attributes,C#,Wcf,Web Services,Soap,Attributes,当下面的代理Web服务返回空值时,我需要将返回的soap消息存储在数据库中,与特定的用户ID相对应。 我当前正在将soap消息捕获到TraceExtension类中的文本文件中。但是由于属性元数据是常量,我无法在运行时将UserID传递给这个类。有什么解决办法吗 [ TraceExtensions.TraceExtension(), System.Web.Services.Protocols.SoapDocumentMethodAttribute("", Use = System.Web.Ser

当下面的代理Web服务返回空值时,我需要将返回的soap消息存储在数据库中,与特定的用户ID相对应。 我当前正在将soap消息捕获到TraceExtension类中的文本文件中。但是由于属性元数据是常量,我无法在运行时将UserID传递给这个类。有什么解决办法吗

[ TraceExtensions.TraceExtension(), System.Web.Services.Protocols.SoapDocumentMethodAttribute("", Use = System.Web.Services.Description.SoapBindingUse.Literal)]
[return: System.Xml.Serialization.XmlElementAttribute("qualifyServicesResponse", Namespace = "")]
public qualifyServicesResponse qualifyServices([System.Xml.Serialization.XmlElementAttribute(Namespace = "")] qualifyServicesRequest qualifyServicesRequest, int UserID)
{
    object[] results = this.Invoke("qualifyServices", new object[] {
            qualifyServicesRequest, UserID});
    return ((qualifyServicesResponse)(results[0]));
}
TraceExtension类如下所示:

<AttributeUsage(AttributeTargets.Method)> _
Public Class TraceExtensionAttribute
    Inherits SoapExtensionAttribute

    Private m_filename As String = "C:\trace\log.xml"

End Class

最后,我在BeforeSerialize中使用message.GetInParameterValue来获取用户ID:

Public Overrides Sub ProcessMessage(ByVal message As SoapMessage)

    Select Case message.Stage
        Case SoapMessageStage.BeforeSerialize
            UserID = Convert.ToInt32(message.GetInParameterValue(1))
        Case SoapMessageStage.AfterSerialize
            WriteOutput(message)
        Case SoapMessageStage.BeforeDeserialize
            WriteInput(message)
        Case SoapMessageStage.AfterDeserialize
    End Select
End Sub
Public Overrides Sub ProcessMessage(ByVal message As SoapMessage)

    Select Case message.Stage
        Case SoapMessageStage.BeforeSerialize
            UserID = Convert.ToInt32(message.GetInParameterValue(1))
        Case SoapMessageStage.AfterSerialize
            WriteOutput(message)
        Case SoapMessageStage.BeforeDeserialize
            WriteInput(message)
        Case SoapMessageStage.AfterDeserialize
    End Select
End Sub