Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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
C# 我对GetWebResponse的异步签名的重写在对响应设置属性时引发运行时异常_C#_.net_Web Services_Asynchronous - Fatal编程技术网

C# 我对GetWebResponse的异步签名的重写在对响应设置属性时引发运行时异常

C# 我对GetWebResponse的异步签名的重写在对响应设置属性时引发运行时异常,c#,.net,web-services,asynchronous,C#,.net,Web Services,Asynchronous,这与我几周前问的一个问题有关,但一直没有得到答案。我需要重写System.Net.WebClient.GetWebResponse的异步签名,以将ContentType设置为utf-8。 () 对于同步调用,我可以很好地做到这一点,但是如果我尝试设置相同的属性,异步实现会引发运行时异常-尽管如果我在调试器中检查响应,我可以看到该属性 我希望这是我忽略的愚蠢的事情 在下面的示例中,我为此处找到的TempConvert服务创建了一个Web引用(是的,旧类型-否,我现在无法将其更改为服务引用),并将其

这与我几周前问的一个问题有关,但一直没有得到答案。我需要重写System.Net.WebClient.GetWebResponse的异步签名,以将ContentType设置为utf-8。 ()

对于同步调用,我可以很好地做到这一点,但是如果我尝试设置相同的属性,异步实现会引发运行时异常-尽管如果我在调试器中检查响应,我可以看到该属性

我希望这是我忽略的愚蠢的事情

在下面的示例中,我为此处找到的TempConvert服务创建了一个Web引用(是的,旧类型-否,我现在无法将其更改为服务引用),并将其命名为OldSchoolReference.TempConvert:

然后我继承了该引用,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApplication1.OldSchoolReference
{
    public partial class ServiceProxy : TempConvert
    {
        protected override System.Net.WebResponse GetWebResponse(System.Net.WebRequest request)
        {
            WebResponse response = base.GetWebResponse(request);
            response.Headers.Set("Content-Type", "text/xml; charset=UTF-8");    // Works fine!
            return response;
        }

        protected override System.Net.WebResponse GetWebResponse(System.Net.WebRequest request, IAsyncResult result)
        {
            HttpWebResponse response = base.GetWebResponse(request, result) as HttpWebResponse;
            response.Headers.Set("Content-Type", "text/xml; charset=UTF-8"); 
            // You will note that this implementation is an System.Net.HttpWebResponse whereas the sychronous one above is a System.Net.WebResponse
            return response;
        }
    }
}
我正在使用一个简单的一键windows窗体来调用该服务

    private void button1_Click(object sender, EventArgs e)
    {
        OldSchoolReference.ServiceProxy service = new OldSchoolReference.ServiceProxy();

        service.CelsiusToFahrenheitCompleted += CallBack;
        service.CelsiusToFahrenheitAsync("0"); // returns 32, naturally
    }

    private static void CallBack(object sender, OldSchoolReference.CelsiusToFahrenheitCompletedEventArgs e)
    {
        MessageBox.Show(e.Result);
    }
但它抛出了一个例外:(

正如您在屏幕截图中所看到的,响应中有一个ContentType属性,但该属性的setter方法似乎没有实现。是的,我知道它已经设置为utf-8,但这不是问题所在。我需要通过重写强制它始终为utf-8

最后,但对我来说并不重要,我包含覆盖的同步实现也可以工作——但我需要它在异步版本上


有人知道我如何在异步响应上设置此属性吗?我将非常感激!

如果它是一个HttpWebResponse,您是否尝试过将
var response=base.GetWebResponse(请求,结果)作为WebResponse
或甚至只是
var response=base.GetWebResponse(请求,结果)

如果它是一个HttpWebResponse,您是否尝试过将
var-response=base.GetWebResponse(请求,结果)作为WebResponse
或甚至仅仅
var-response=base.GetWebResponse(请求,结果)

很遗憾,它会抛出相同的异常。如果从头开始创建一个可以控制的新响应,就像wishIt抛出相同的异常一样,很遗憾。如果从头开始创建一个可以控制的新响应,就像wishIt现在正试图通过标题来设置它一样。我在家里的示例中,它似乎工作得很好,我需要这样做在周一的工作中检查,看看这是否解决了问题。我现在正在尝试通过标题设置它。在家里的示例中,它似乎运行良好,我需要在周一的工作中检查,看看这是否解决了问题。