将 json 参数传递给 WCF 函数给出错误“服务器在处理请求时遇到错误。有关更多详细信息,请参阅服务器日志”

Posted

技术标签:

【中文标题】将 json 参数传递给 WCF 函数给出错误“服务器在处理请求时遇到错误。有关更多详细信息,请参阅服务器日志”【英文标题】:passing json parameters to WCF function giving error "The server encountered an error processing the request. See server logs for more details" 【发布时间】:2016-12-21 22:14:04 【问题描述】:

我有一个 WCF 服务,它接受一个字符串参数。当我尝试调用它时,我收到一个错误“服务器在处理请求时遇到错误。有关更多详细信息,请参阅服务器日志” 我也通过 fiddler 传递 json 请求重现了这个问题。只是为了确保我的 jQuery $.ajax() 没有问题。

这是我的 ServiceContract、WCF 类和配置 -

服务合同 -

[ServiceContract]
public interface iAgentDesktop

    [OperationContract]
    string Transfer(string extensionNumber);
    [OperationContract]
    string Conference(string extensionNumber);

WCF 服务

public class AgentDesktopMediator : iAgentDesktop

    string iAgentDesktop.Conference(string extensionNumber)
    
            //do something
            return "";
    
    string iAgentDesktop.Conference(string extensionNumber)
    
        do something
        return "";
    

配置文件-

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="WCFListener.AgentDesktopMediator">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8070/"/>
          </baseAddresses>
        </host>
        <endpoint address="AgentDesktopMediator" binding="basicHttpBinding" contract="WCFListener.iAgentDesktop"></endpoint>
        <endpoint address="jAgentDesktopMediator" binding="webHttpBinding" contract="WCFListener.iAgentDesktop" behaviorConfiguration="web"></endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp defaultOutgoingResponseFormat="Json"/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>

【问题讨论】:

如果我不传递参数,它不会抛出任何错误.. 只是我的参数是 NULL 然后 【参考方案1】:

您需要在跟踪文件中找到实际错误。要创建跟踪文件,首先在您的 c 驱动器中创建一个名为 logs 的文件夹,并将以下部分放入您的 wcf 配置文件中

<system.diagnostics>
<sources>
  <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
    <listeners>
      <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\logs\Traces.svclog" />
    </listeners>
  </source>
</sources>
</system.diagnostics>

现在,每当您调用服务时,它都会提取跟踪文件中的所有诊断信息,您可以双击并在 MS Trace 查看器中打开。

【讨论】:

好的.. 现在.. 我有一个 WCF,然后我将它托管在控制台应用程序中.. 这是在控制台应用程序中还是在 WCF 的配置中?? 它应该在 wcf 配置中。 您是否创建了文件夹?您也可以再次显示您的配置文件 Anil Goel - 是的.. 我已经创建了这个文件夹【参考方案2】:

好的,我的问题本身不完整..我在问题解决后得出结论..

问题是在我的内容类型中,我没有在 contentType 和 charset 之间放置分号..

这是我在 $.ajax() 中提供的 -

Content-Type: application/json charset=utf-8

它必须是-

Content-Type: application/json; charset=utf-8

而且,我在尝试从提琴手访问服务时也从不费心查看标题。我只专注于我提供的数据格式

【讨论】:

以上是关于将 json 参数传递给 WCF 函数给出错误“服务器在处理请求时遇到错误。有关更多详细信息,请参阅服务器日志”的主要内容,如果未能解决你的问题,请参考以下文章

无法以 GET 类型的方法将字典作为参数传递给 WCF REST 服务

通过 std::thread 将参数传递给函数时出现语法错误

将多个参数传递给线程函数

将对象作为参数传递给函数

如何使用 QT 和 C++ 将字符串参数传递给函数

从代理客户端将参数传递给 WCF 服务中心