将JSON数据发布到WCF REST

时间:2010-06-02 19:20:08

标签: wcf json dictionary

我正在尝试使用jQuery从客户端应用程序向基于WCF REST入门工具包的REST WCF服务发送数据。

这是我到目前为止所拥有的。

服务定义:

[WebHelp(Comment = "Save PropertyValues to the database")]        
[WebInvoke(Method = "POST", UriTemplate = "PropertyValues_Save",
           BodyStyle = WebMessageBodyStyle.WrappedRequest,
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
public bool PropertyValues_Save(Guid assetId,
                                Dictionary<Guid, string> newValues) {
            // ...
}

来自客户的电话:

$.ajax({
     url:SVC_PROPERTYVALUES_SAVE,
     type: "POST",
     contentType: "application/json; charset=utf-8",
     data: jsonData,
     dataType: "json",
    error: function(XMLHttpRequest, textStatus, errorThrown) {
     alert(textStatus + ' ' + errorThrown);
      },
     success: function(data) {
      if (data)  {
       alert('Values saved'); $("#confirmSubmit").dialog('close'); 
      }
      else {
       alert('Values failed to save'); $("#confirmSubmit").dialog('close');
      }      
     }
    });

传递的JSON示例:

{
    "assetId": "d70714c3-e403-4cc5-b8a9-9713d05b2ee0",
    "newValues": [
        {
            "key": "bd01aa88-b48d-47c7-8d3f-eadf47a46680",
            "value": "0e9fdf34-2d12-4639-8d70-19b88e753ab1" 
        },
        {
            "key": "06e8eda2-a004-450e-90ab-64df357013cf",
            "value": "1d490aec-f40e-47d5-865c-07fe9624f955" 
        } 
    ] 
}

的web.config

<?xml version="1.0"?>
<configuration>

     <configSections>

          <sectionGroup name="applicationSettings"
                        type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

          </sectionGroup>

     </configSections>

 <system.web>
  <compilation debug="true"/>
        </system.web>
 <system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
 </system.serviceModel>

     <appSettings>

         ...

     </appSettings>

</configuration>

我在虚拟目录上使用Windows身份验证,并禁用匿名访问。当我调用GET操作时,一切都很好。此代码提示浏览器登录。当我输入凭据时,我只是在浏览器中收到“未定义错误”的警报。

即使你无法解决我的特定错误,你是否看到任何看起来错误的东西?

我几乎整天都在为此而努力。

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果您遇到身份验证问题,请务必确认只有“Windows身份验证”开启,“匿名”访问是虚拟目录中的开关。

如果你对irtual目录没有任何问题,你应该发布 web.config 文件的代码。

根据您的问题,我不清楚您是否只有身份验证问题,或者PropertyValues_Save不会使用您发布的JSON数据调用。你能详细说明一下吗?

更新:在我看来,如果JavaScript客户端使用“Key”和“Value”属性名称而不是“key”和“value”,那么您的程序将会正常工作。

我建议您查看我的旧答案How do I build a JSON object to send to an AJAX WebService?的结尾,以验证您是否正确包装了服务器调用的数据。