【问题标题】:jQuery post data to WCF WebservicejQuery 将数据发布到 WCF Web 服务
【发布时间】:2013-03-21 13:04:37
【问题描述】:

我开发了一个 WCF Web 服务,由 jQuery 调用。 WCF Web 服务和启用 WCF Web 服务的 AJAX 客户端运行在不同的 Web 服务器上。

这里是 Web 服务的定义。

[ServiceContract]
 interface IPersonService
 {
   [OperationContract]
   Person InsertPerson(Person person);
 }


[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class PersonService : IPersonService
{
  ...

  [WebInvoke(UriTemplate = "/POST/PersonPost", Method = "POST", BodyStyle =           WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
  public Person InsertPerson(Person person)
  {
      Debug.WriteLine("POST:[PersonId = {0} PersonName = {1}]", person.Id, person.Name);
             return new Person(person.Id, person.Name);
  }

}
[DataContract]
public class Person
{
    [DataMember]
    private string id;
    [DataMember]
    private string name;

    public Person(string id, string name)
    {
        this.id = id;
        this.name = name;
    }

    public string Id { get; set; }
    public string Name { get; set; }

    public override string ToString()
    {
        var json = JsonConvert.SerializeObject(this);
        return json.ToString();
    }
}

这里是客户端:

$.ajax({
  type: "POST",
  data: { "id": "Mehrere ;;; trennen", "name": "GetPerson" },
  contentType: "application/json; charset=utf-8",
  dataType: "jsonp",
  processData: false,
  crossDomain: true,
  url: "http://localhost:59291/Person/POST/PersonPost",
  success: function (data) {
    alert("Post erfolgreich: ");
  },
  error: function (xhr, ajaxOptions, thrownError) {
    alert("Fehler Post: Status " + xhr.status + " AntwortText " + xhr.responseText);
  }
});

我得到 HTTP 代码 200。这还不错吧?但是有人可以告诉我,我怎样才能访问 jQuery 客户端发送给 WCF 服务的数据???

谢谢

【问题讨论】:

  • 你试过 IE 和 Firefox 吗?一个给你一个错误而另一个没有? (我问的是一个特定的原因,而不仅仅是钓鱼)。
  • IE 说 http Code 200,Chrome 什么也不说
  • 你弄明白了吗?对于未来的读者来说,让人们知道解决方案总是好的。

标签: c# jquery wcf web-services post


【解决方案1】:

如果您使用 jsonp 数据类型,则必须在返回数据时处理 json 回调...

jsonCallback(Your json response goes here);

例如:

      jsonCallback(
    {
        "sites":
        [
            {
                "siteName": "JQUERY4U",
                "domainName": "http://www.jquery4u.com",
                "description": "#1 jQuery Blog for your Daily News, Plugins, Tuts/Tips & Code Snippets."
            },
            {
                "siteName": "BLOGOOLA",
                "domainName": "http://www.blogoola.com",
                "description": "Expose your blog to millions and increase your audience."
            },
            {
                "siteName": "PHPSCRIPTS4U",
                "domainName": "http://www.phpscripts4u.com",
                "description": "The Blog of Enthusiastic PHP Scripters"
            }
        ]
    }
);

【讨论】:

  • 您好,谢谢您的回复:但是我想读取服务器上的数据,您明白我想要什么吗?或者我走错了路。
【解决方案2】:
  1. 你的 JSON 数据对我来说有点奇怪。我不是 JSON 专家。但如果我要写它,我会有类似的东西:

    var body = '{"person":{';
    body = body + '"id":"' + '"abc123"' + '",'
    body = body + '"name":"' + '"john"' + '"'
    body = body + '}}'; 
    

然后将“data:”值设置为等于“body”变量

            dataType: "json",
            data: body,

注意,这样我可以添加调试行

alert(body);

在代码中(在我创建它之后)查看数据(在我通过请求发送之前)。

.......

第二个。

在这里查看我的旧对话:

CORS Support within WCF REST Services

为什么?

因为我遇到了一些问题,而当你遇到问题时

"http://localhost:59291/"

触发了那段记忆。

【讨论】:

  • 谢谢,嗯,我已经更改了我的 jQuery 代码。但这对我没有帮助。你的第二个提示,我不知道。我只想在我的服务器上拥有来自 jQuery 客户端的数据。
  • 好的...我的建议是先将数据发送到服务器。那行得通吗?或者您在读取发回的数据时遇到问题?
  • 我无法读取数据,服务器在这里工作我想要数据 public Person InsertPerson(Person person) { Debug.WriteLine("POST:[PersonId = {0} PersonName = { 1}]", 人.Id, 人名);返回新人(person.Id,person.Name); }
  • 服务器端的代码工作正常吗?或不? “我无法读取数据”是模棱两可的。您必须非常清楚您遇到问题的是服务器端还是客户端。你能在服务器端设置一个断点,你有没有在服务器端进入你的代码?
  • 是的,这行得通,我进入了方法,但是参数 person 为空
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 2011-09-13
相关资源
最近更新 更多