将JSON数据发布到WCF REST

将JSON数据发布到WCF REST,wcf,json,dictionary,Wcf,Json,Dictionary,我正在尝试使用jQuery将数据从客户端应用程序发送到基于WCF REST starter工具包的REST WCF服务 这是我到目前为止所拥有的 服务定义: [WebHelp(Comment = "Save PropertyValues to the database")] [WebInvoke(Method = "POST", UriTemplate = "PropertyValues_Save", BodyStyle = WebMessageBodySt

我正在尝试使用jQuery将数据从客户端应用程序发送到基于WCF REST starter工具包的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) {
            // ...
}
正在传递的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身份验证,并且已禁用匿名访问。当我调用正在获取的操作时,一切都很好。此代码提示浏览器登录。当我输入我的凭证时,我只会在浏览器中得到一个警告,上面写着“错误未定义”

即使你不能帮我纠正我的具体错误,你看了一眼,有没有发现什么看起来不对劲的地方

我几乎一整天都在为这件事绞尽脑汁


提前感谢。

如果您有身份验证问题,请务必验证您的虚拟目录中是否只启用了“Windows身份验证”开关,以及是否启用了“匿名”访问开关

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

从您的问题来看,我不清楚您是否只有身份验证问题,或者您发布的JSON数据不会调用
PropertyValues\u Save
。你能说得更清楚些吗

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


我建议您也查看我的旧答案的结尾,以验证您是否为服务器调用打包了正确的数据。

集成了身份验证,并且禁用了匿名。我只得到这个特定方法的登录提示。您请求的web.config:。。。没错。我希望您在
块中也有
,如果没有,您应该添加这个。
PropertyValues\u Save
工作正常吗?(仅身份验证问题)格式化程序在尝试反序列化消息时引发异常:尝试反序列化参数时出错。InnerException消息是“数据协定类型”System.Runtime.Serialization.KeyValue“2[[System.Guid,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089],[System.String,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]”无法反序列化,因为所需数据成员的密钥,未找到值“”。请参阅InnerException了解更多详细信息。我以前也看到过此错误。我在web.config中添加了身份验证模式,并得到了这个异常。我在想,也许我的JSON不好,但它通过了验证:如果我觉得JSON还可以,但是要反序列化
字典
,应该使用
CollectionDataContract
属性(请参阅,或)。另一种通用方法是使所有接口方法只使用非常简单的数据类型。例如,您可以使用两个
列表
而不是
字典
,并将它们合并到
字典
中的
属性值\u Save
<?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>