对象引用不是wsdl / wcf应用程序中对象的实例

时间:2017-02-09 10:12:40

标签: c# web-services wcf soap wsdl

我正在开发一个.net 4.5 wcf服务。此wcf接受包含带有自定义身份验证标头的XML的SOAP消息。将此xml转换为对象,使用以下步骤生成对象定义:

  1. 添加服务参考。
  2. 引用我收到的包含对象定义的wsdl。
  3. 生成包含references.cs的服务引用。这个文件包含对象定义和一些可覆盖的函数,我在其中放置自定义代码。
  4. 这一切都很好,直到返回错误为止。 每隔一段时间(没有特定的时间跨度,例如3天或1周),Web服务将返回错误"对象引用未设置为对象的实例"。这似乎发生在System.ServiceModel.dll中,我认为这个dll负责将传入的SOAP Message xml内容转换为对象。 最奇怪的部分是当我重新启动Web服务时,错误消失了,一切都按预期工作。

    我创建了一个SVCLog,这是结果(与发送消息时返回的错误相同);

    <E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
    <System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
    <EventID>131076</EventID>
    <Type>3</Type>
    <SubType Name="Error">0</SubType>
    <Level>2</Level>
    <TimeCreated SystemTime="2017-02-08T15:01:36.6393145Z" />
    <Source Name="System.ServiceModel" />
    <Correlation ActivityID="{72d279c1-d80d-4fa9-8a82-eb3ad1b69f0d}" />
    <Execution ProcessName="w3wp" ProcessID="12672" ThreadID="8" />
    <Channel />
    <Computer>RD0003FF4C676E</Computer>
    </System>
    <ApplicationData>
    <TraceData>
    <DataItem>
    <TraceRecord Severity="Error" Channel="Operational" xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord">
    <TraceIdentifier>http://msdn.microsoft.com/en-US/library/System.ServiceModel.Diagnostics.TraceHandledException.aspx</TraceIdentifier>
    <Description>Handling an exception. Exception details: System.NullReferenceException: Object reference not set to an instance of an object.
       at System.ServiceModel.Dispatcher.OperationFormatter.TypedMessageParts.SetValue(Object value, Int32 index)
       at System.ServiceModel.Dispatcher.OperationFormatter.TypedMessageParts.SetTypedMessageParts(Object[] values)
       at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeRequest(Message message, Object[] parameters)
       at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
       at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</Description>
    <AppDomain>/LM/W3SVC/1905215994/ROOT-1-131310166559267906</AppDomain>
    <Exception>
    <ExceptionType>System.NullReferenceException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType>
    <Message>Object reference not set to an instance of an object.</Message>
    <StackTrace>
    at System.ServiceModel.Dispatcher.OperationFormatter.TypedMessageParts.SetValue(Object value, Int32 index)
    at System.ServiceModel.Dispatcher.OperationFormatter.TypedMessageParts.SetTypedMessageParts(Object[] values)
    at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeRequest(Message message, Object[] parameters)
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc&amp; rpc)
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc)
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc&amp; rpc)
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&amp; rpc)
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp; rpc)
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&amp; rpc)
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&amp; rpc)
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&amp; rpc)
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&amp; rpc)
    at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
    </StackTrace>
    <ExceptionString>System.NullReferenceException: Object reference not set to an instance of an object.
       at System.ServiceModel.Dispatcher.OperationFormatter.TypedMessageParts.SetValue(Object value, Int32 index)
       at System.ServiceModel.Dispatcher.OperationFormatter.TypedMessageParts.SetTypedMessageParts(Object[] values)
       at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeRequest(Message message, Object[] parameters)
       at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc&amp; rpc)
       at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc&amp; rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&amp; rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp; rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&amp; rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&amp; rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&amp; rpc)
       at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&amp; rpc)
       at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</ExceptionString>
    </Exception>
    </TraceRecord>
    </DataItem>
    </TraceData>
    </ApplicationData>
    </E2ETraceEvent>
    

    有没有人知道为什么会出现这种错误,如何解决或如何调试?在我的任何代码被命中之前发生错误。困难的部分是它是随机的,所以不可能轻易地再现(直到它再次出现),通过重新启动而不是可调试来修复。在调试器模式下发生异常时Visual Studio将打开源未找到页面。

    [编辑] 也许很高兴知道;此wcf托管在Azure应用服务中。

0 个答案:

没有答案