WCF错误 - 未将对象引用设置为对象的实例。生产服务不起作用

时间:2013-10-16 15:21:48

标签: c# wcf nullreferenceexception

我刚开始写问题,长期读者。如果我省略了某些内容,请告诉我。

我查看了许多不同的方案和可能的修复程序,但无法使我的WCF服务正常工作。

我的服务负责将数据从许多不同的集传递到主存储库。客户端在本地集合级别收集数据并将其传递给插入数据并传回结果消息的服务。再次在测试环境中,这正常工作。

在生产中,我将服务添加到场外服务器并在远程集上配置客户端。客户端能够配置和接收来自服务的更新。到目前为止一切正常。但是,一旦客户端尝试跨越它传输数据,就会收到以下错误“对象引用未设置为对象的实例。”

通过错误检查我已确认数据库没有连接字符串问题。我在测试环境中再次运行相同的数据传输,没有任何问题。我能够连接到本地集上的.svc网址。

我通过数据合约方法调用在不同点添加了日志记录,但这些日志都没有触发任何结果。我还在测试应用程序上测试了写入功能,确认写入temp文件夹的凭据没有问题。例如:

public Result InsertVenueRecord(Venue v)
{
        System.IO.File.WriteAllText(@"C:\temp\MadeItToVenue" + DateTime.Now.Ticks.ToString() + ".log.txt", "insertVenue()\r\n\r\n");
        int oldId = v.VenueId;
        try
        {
            System.IO.File.WriteAllText(@"C:\temp\MadeItToVenue" + DateTime.Now.Ticks.ToString() + ".log.txt", "insertVenue()\r\n\r\n");
            //Check Address 
            if (v.Address.AddressId != 0)

客户端app.Config如下所示:

    <configuration>
    <system.serviceModel>
      <bindings>
        <basicHttpBinding>
          <binding name="BasicHttpBinding_placeholder" />
        </basicHttpBinding>
      </bindings>  
      <client>
        <endpoint address="Removed" binding="basicHttpBinding"
          bindingConfiguration="BasicHttpBinding_placeholder" contract="placeholder.placeholder"
          name="BasicHttpBinding_placeholder" />
      </client>
    </system.serviceModel>
  <appSettings>
    <add key="DTFirstWave" value="Venue|Event|EventSurveyLocation|Agent|LoginHistory|LoginUsed"/>
  </appSettings>
  <connectionStrings>
    <!-- Removed Connection Strings -->

  </connectionStrings>
</configuration> 

服务webconfig如下所示:

<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0"/>
        <httpRuntime/>
    </system.web>
    <system.serviceModel>
        <bindings>
             <basicHttpBinding>
                  <binding allowCookies="true" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="32" maxStringContentLength="52428800" maxArrayLength="52428800" maxBytesPerRead="52428800" maxNameTableCharCount="52428800"/>
    </binding>
  </basicHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<protocolMapping>
  <add binding="basicHttpsBinding" scheme="https"/>
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>

 <directoryBrowse enabled="true"/>
 </system.webServer>
 <connectionStrings>
 <!--Removed -->
 </connectionStrings>
</configuration>

我不知道为什么这不起作用。

1 个答案:

答案 0 :(得分:2)

通过在服务配置中添加 system.daignostics 来启用您的服务SVC日志。它会在生产时给您正确的错误。

它将在您的服务目录中创建“App_tracelog.svclog”文件。

<system.diagnostics>
<sources>
  <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
    <listeners>
      <add name="ServiceModelTraceListener" />
    </listeners>
  </source>
  <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing">
    <listeners>
      <add name="ServiceModelTraceListener" />
    </listeners>
  </source>
  <source name="System.Runtime.Serialization" switchValue="Verbose,ActivityTracing">
    <listeners>
      <add name="ServiceModelTraceListener" />
    </listeners>
  </source>
</sources>
<sharedListeners>
  <add initializeData="App_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp" />
</sharedListeners>