Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
升级到WCF Data Services 5.0后缺少内容类型标头值_Wcf_Wcf Data Services - Fatal编程技术网

升级到WCF Data Services 5.0后缺少内容类型标头值

升级到WCF Data Services 5.0后缺少内容类型标头值,wcf,wcf-data-services,Wcf,Wcf Data Services,升级到OData V3的WCF Data Services 5.0后,我无法进行插入或更新。 唯一可能的是选择 编辑 重写方法HandleException中的异常: 例外情况: System.Data.Services.DataServiceException:缺少内容类型标题值。 位于System.Data.Services.HttpProcessUtility.ReadContentType(字符串contentType、字符串和mime、编码和编码) 位于System.Data.Serv

升级到OData V3的WCF Data Services 5.0后,我无法进行插入或更新。 唯一可能的是选择

编辑

重写方法HandleException中的异常:

例外情况: System.Data.Services.DataServiceException:缺少内容类型标题值。 位于System.Data.Services.HttpProcessUtility.ReadContentType(字符串contentType、字符串和mime、编码和编码) 位于System.Data.Services.Serializers.Deserializer.CreateDeserializer(请求描述、IDataService数据服务、布尔更新、UpdateTracker跟踪程序) 在System.Data.Services.DataService
1.HandlePostOperation(RequestDescription描述,IDataService数据服务)
在System.Data.Services.DataService中
1.ProcessIncomingRequest(请求描述,IDataService数据服务) 位于System.Data.Services.DataService
1.HandleNonBatchRequest(请求描述)
在System.Data.Services.DataService中
1.HandleRequest()

响应代码:400

客户端代码 我在HTTP请求头中设置了一个令牌

    /// <summary>
    /// Initializes a new instance of the <see cref="ServiceBase"/> class.
    /// </summary>
    /// <param name="uri">service uri</param>
    protected ServiceBase(Uri uri)
    {
        this.Context = new Entities(uri) { MergeOption = MergeOption.OverwriteChanges };
        this.Context.SendingRequest += new EventHandler<SendingRequestEventArgs>(this.ContextSendingRequest);
    }

    /// <summary>
    /// OnSendingRequest
    /// </summary>
    /// <param name="sender">source</param>
    /// <param name="e">event args</param>
    private void ContextSendingRequest(object sender, SendingRequestEventArgs e)
    {
        e.RequestHeaders["token"] = "xyassdfdfdfdf";
    }
//
///初始化类的新实例。
/// 
///服务uri
受保护的ServiceBase(Uri)
{
this.Context=新实体(uri){MergeOption=MergeOption.OverwriteChanges};
this.Context.SendingRequest+=新事件处理程序(this.ContextSendingRequest);
}
/// 
///OnSendingRequest
/// 
///来源
///事件参数
私有void ContextSendingRequest(对象发送者,SendingRequestEventArgs e)
{
e、 RequestHeaders[“令牌”]=“XYASSDFDF”;
}
服务代码: 服务解析此标头并检查令牌

    public XYDataService()
    {
        this.ProcessingPipeline.ProcessingRequest += this.ProcessingPipelineProcessingRequest;
    }


    /// <summary>
    /// OnProcessingRequest
    /// </summary>
    /// <param name="sender">source</param>
    /// <param name="e">event args</param>
    private void ProcessingPipelineProcessingRequest(object sender, DataServiceProcessingPipelineEventArgs e)
    {
        var authHeader = HttpContext.Current.Request.Headers["token"];

        if (string.IsNullOrEmpty(authHeader) || !authHeader.Equals("xyassdfdfdfdf"))
        {
            throw new DataServiceException(401, "401 Unauthorized");
        }
    }
public XYDataService()
{
this.ProcessingPipeline.ProcessingRequest+=this.ProcessingPipelineProcessingRequest;
}
/// 
///OnProcessingRequest
/// 
///来源
///事件参数
私有void ProcessingPipelineProcessingRequest(对象发送方、DataServiceProcessingPipelineEventArgs e)
{

var authHeader=HttpContext.Current.Request.Headers[“token”]; if(string.IsNullOrEmpty(authHeader)| |!authHeader.Equals(“XYASSDFDF”)) { 抛出新的DataServiceException(401,“401未经授权”); } }
谢谢你的帮助


Andi使用answer,因为我需要在这里添加更多文本

我尝试了一个与您的代码非常相似的代码,但效果很好:

DemoService ctx = new DemoService(new Uri("http://services.odata.org/(S(jcemln1vp0u1gqtoyqqpwrc1))/OData/OData.svc/"));
ctx.UsePostTunneling = true;
ctx.SendingRequest += (sender, ea) => { ea.RequestHeaders["token"] = "value"; };

ctx.UpdateObject(ctx.Products.First());
ctx.SaveChanges();
使用NuGet works最新的WCF DS 5.0位运行此命令。我还使用Fiddler验证了它是否发送内容类型头


另一方面,您的请求没有内容类型头。您能否验证您使用的是最新的NuGet软件包,并且您上面发布的代码确实是您正在测试的代码?

您能否更详细地描述一下该场景?你用的是什么客户机?如果可能的话,你能用Fiddler抓取一个跟踪吗?在保存更改期间,我得到了错误。没有问题。在更新期间或添加新条目时,我会遇到上述错误。我正在使用silverlight客户端。你能把异常和调用堆栈一起发布吗?另外,请使用Fiddler并获取失败的请求/响应的跟踪。var authHeader=HttpContext.Current.request.Headers[“token”];当我把它评论出来时,它不起作用。但是我需要检查客户端设置的令牌?当你说“它不工作”时,请你更具体一点,用调用堆栈和理想情况下处理的一小段代码发布异常。嗨,vitek,我使用的是最新版本5.0.1。使用之前的版本4.0一切正常。如果可能,请准备一个复制项目,并将其发送给我microsoft com上的vitek.karas。