C# 我对GetWebResponse的异步签名的重写在对响应设置属性时引发运行时异常
这与我几周前问的一个问题有关,但一直没有得到答案。我需要重写System.Net.WebClient.GetWebResponse的异步签名,以将ContentType设置为utf-8。 () 对于同步调用,我可以很好地做到这一点,但是如果我尝试设置相同的属性,异步实现会引发运行时异常-尽管如果我在调试器中检查响应,我可以看到该属性 我希望这是我忽略的愚蠢的事情 在下面的示例中,我为此处找到的TempConvert服务创建了一个Web引用(是的,旧类型-否,我现在无法将其更改为服务引用),并将其命名为OldSchoolReference.TempConvert: 然后我继承了该引用,如下所示:C# 我对GetWebResponse的异步签名的重写在对响应设置属性时引发运行时异常,c#,.net,web-services,asynchronous,C#,.net,Web Services,Asynchronous,这与我几周前问的一个问题有关,但一直没有得到答案。我需要重写System.Net.WebClient.GetWebResponse的异步签名,以将ContentType设置为utf-8。 () 对于同步调用,我可以很好地做到这一点,但是如果我尝试设置相同的属性,异步实现会引发运行时异常-尽管如果我在调试器中检查响应,我可以看到该属性 我希望这是我忽略的愚蠢的事情 在下面的示例中,我为此处找到的TempConvert服务创建了一个Web引用(是的,旧类型-否,我现在无法将其更改为服务引用),并将其
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现在正试图通过标题来设置它一样。我在家里的示例中,它似乎工作得很好,我需要这样做在周一的工作中检查,看看这是否解决了问题。我现在正在尝试通过标题设置它。在家里的示例中,它似乎运行良好,我需要在周一的工作中检查,看看这是否解决了问题。