【发布时间】:2015-01-25 13:45:12
【问题描述】:
我尝试使用带有以下数据的 jquery ajax POST 调用 WCF 服务:
数据 = "{\"StudentID\":\"18\",\"Message\":{\"Header\":{\"EMailID\":\"0\",\"From\":{\"AddressType \":\"0\",\"别名类型\":\"0\",\"名称\":\" Teacher\",\"StudentID\":\"18\",\"SymbolURL\":\"teacher.png\",\"Address\":\"18\"},\"To\":{ \"AddressType\":\"0\",\"AliasType\":\"0\",\"Name\":\"Ian \",\"StudentID\":\"346\",\"SymbolURL\":\"\",\"Address\":\"346\"},\"TimeRecieved\":\"/Date( 0)/\"},\"版本\":\"1\",\"MailMessageXML\":\"\",\"CompressedBody\":\"\"},\"ImageFileName\":\" \"}"
我收到一个错误(响应正文):
{"ExceptionDetail":{"HelpLink":null,"InnerException":{"HelpLink":null,"InnerException":{"HelpLink":null,"InnerException":null,"Message":"出乎意料 文件结束。","StackTrace":" at System.Xml.EncodingStreamWrapper.ReadBOMEncoding(布尔 notOutOfBand)\u000d\u000a 在 System.Xml.EncodingStreamWrapper..ctor(流流,编码 编码)\u000d\u000a
......
这是我的 WCF 函数:
[DataContract]
public class MailHeader
{
[DataMember] public Int64 EMailID;
[DataMember] public MailAddress From;
[DataMember] public MailAddress To;
[DataMember] public DateTime TimeRecieved;
}
[DataContract]
public class MailAddress
{
[DataMember] public Int64 AddressType;
[DataMember] public Int64 AliasType;
[DataMember] public string Name;
[DataMember] public Int64 StudentID;
[DataMember] public string SymbolURL;
[DataMember] public string Address;
}
[DataContract]
public class MailMessage
{
[DataMember] public MailHeader Header;
[DataMember] public Int64 version;
[DataMember] public XElement MailMessageXML;
[DataMember] public byte[] CompressedBody;
}
SendMessageStatusType SendMessage(Int64 StudentID, MailMessage Message,string ImageFileName);
This is my servicemodel from web.config:
<system.serviceModel/>
<behaviors>
<endpointBehaviors>
<behavior name="AjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="metadataGetBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" ></serviceDebug>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="binaryEncoding" >
<httpTransport />
</binding>
</customBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<services>
<service name="XXXX.Web.XXXXSVC" behaviorConfiguration="metadataGetBehavior">
<endpoint address="ajax" behaviorConfiguration="AjaxBehavior"
binding="webHttpBinding" contract="XXXX.Web.IXXXXSVC" />
<endpoint address="binary"
binding="customBinding" bindingConfiguration="binaryEncoding"
contract="XXXX.Web.IXXXXSVC" />
</service>
</services>
</system.serviceModel>
jquery 调用很简单,与其他对我有用的方法相同:
$.ajax({
type: "POST",
url: Url, // Location of the service
data: Data, //Data sent to server
contentType: "application/json; charset=utf-8",
processdata: false, //True or False
success: function (msg) {
//On Successfull service call
successCallBackFunc(msg);
},
error: errorCallBackFunc // When Service call fails
});
任何想法为什么它不起作用?
【问题讨论】:
-
我从来没有对 WCF 做过任何事情,我也不知道它的 API,但你确定你期待的是 JSON 吗?在某个名为
System.Xml.EncodingStreamWrapper... 的类中抛出异常