我正在使用.NET Framework 4.5.1 WebClient,并将其发布到我在本地运行的* .ashx中,以便进行调试。客户站点使用如下代码:
var cli = new WebClient();
cli.Headers[ HttpRequestHeader.ContentType ] = "application/json";
var job = new
{
Inputs = inputs,
InputTables = inputTables,
...
};
var configuration = Newtonsoft.Json.JsonConvert.SerializeObject( job );
var response = cli.UploadString(
serviceUrl,
configuration
);
serviceUrl为http://localhost:54300/Calculation.ashx
,正在IIS Express下运行。
Web服务通过以下方式返回结果:
private void ReturnResponse( HttpContext context, JObject result )
{
using ( var textWriter = new StreamWriter( context.Response.OutputStream ) )
{
context.Response.ContentType = "application/json";
using ( var jsonWriter = new JsonTextWriter( textWriter ) )
{
result.WriteTo( jsonWriter );
}
}
}
这全都可以在我自己的个人计算机上使用,但是在我公司发行的计算机上,它无法使用,我不知所措。我认为这是某种安全设置,或者至少我希望如此。
在公司计算机上,客户站点已成功提交到Web服务,我已经逐步完成了Web服务代码,并且所有代码在那里工作,并且它通过ReturnResponse
返回了结果,并且看起来都正确。但是,客户端站点随后抛出500错误'远程服务器返回错误:(500)内部服务器错误。',但没有太多信息可以继续。
其他:如果将Web服务托管在Web上(显然在IIS下运行),则如果客户端站点(在我公司的计算机上运行)提交到Web服务,则此代码可以正常工作。所以代码很好-我认为:)-但仅在本地运行Web服务时才出现问题。
有人知道可能导致这种情况的某种安全性/配置设置吗?正如我所说,它可以在多台个人计算机上正常工作,没有问题。
抛出的500个异常的类型为HttpException
,因此我阅读了响应并发现了此错误消息:
无法向会话状态服务器发出会话状态请求。请确保启动ASP.NET状态服务,并确保客户端和服务器端口相同。如果服务器位于远程机器,请检查的价值HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ aspnet_state \ Parameters \ AllowRemoteConnection。如果服务器在本地计算机上,以及前面提到的注册表值不存在或设置为0,则状态服务器连接字符串必须使用“ localhost”或服务器名称为“ 127.0.0.1”。
因此,我只需要打开ASP.NET状态服务。我可以进行一个web.config转换,以使debug / local仅在常规的inproc会话中运行,然后使发行版使用State Service(在我们的案例中是必需的),但是现在在本地将其打开就足够了。