将 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 服务