簡體   English   中英

如何從Ajax調用WCF服務?

[英]How to Call WCF service from ajax?

我有以下提供的WCF服務-

 [ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Sync
{
    [OperationContract]
    [WebInvoke]
    public string SyncDataNow(UserData obj)
    {
        try
        {
            using (MavenifyEntities db = new MavenifyEntities())
            {
                bool userExist = db.Users.Any(u => u.Id == obj.UserId);
                if (userExist)
                {
                    DataSync data = new DataSync();
                    data.UserId = obj.UserId;
                    data.TempId = obj.TempId;
                    data.Content = obj.Content;
                    data.CreatedDate = DateTime.Now.ToString();
                    db.DataSyncs.Add(data);
                    db.SaveChanges();
                    return "1";
                }
                else
                {
                    return "0";
                }
            }
        }
        catch (Exception ex)
        {
            return "error";
        }
    }
}

[DataContract(Namespace = "")]
public class UserData
{
    [DataMember]
    public int UserId { get; set; }
    [DataMember]
    public string Content { get; set; }
    [DataMember]
    public string TempId { get; set; }
}

當我從POSTMAN調用此服務時,它接收到空數據,請幫助我找出我在做什么錯。

我正在以json格式發送原始數據,例如-

{ “的UserData”:{ “用戶ID”: “1”, “TempId”: “asdbsjiadf”, “內容”: “你好”}}。

我的web.config條目是-

 <system.serviceModel>
<behaviors>
  <endpointBehaviors>
    <behavior name="PhoneSync.SyncAspNetAjaxBehavior">
      <enableWebScript />
    </behavior>
  </endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
  <service name="PhoneSync.Sync">
    <endpoint address="" behaviorConfiguration="PhoneSync.SyncAspNetAjaxBehavior" binding="webHttpBinding" contract="PhoneSync.Sync" /> 
  </service>
</services>

您還應該使用Wcf Rest WebHttpBinding您將面臨Cross Domain Messaging問題。 因此,您將禁用跨消息傳遞安全性或為jsonp創建自己的行為

並且您的消息應該是{"UserId":"1","TempId":"asdbsjiadf","Content":"Hello"}作為簽名。 如果要使用{"UserData":{"UserId":"1","TempId":"asdbsjiadf","Content":"Hello"}} ,則應將其包裝起來

確保默認情況下,請求/響應是Json 我會在[WebInvoke(RequestFormat = WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json)]中明確指定

也許有意義,請像此處建議的那樣配置一些選項

我已經通過在json中將名稱“ UserData”更改為“ obj”解決了該問題,即更改了

{ “的UserData”:{ “用戶ID”: “1”, “TempId”: “asdbsjiadf”, “內容”: “你好”}}

{ “目標文件”:{ “用戶ID”: “1”, “TempId”: “asdbsjiadf”, “內容”: “你好”}}

現在我正在接收服務中的數據。 但是我不知道為什么會這樣。 請分享原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM