WebClient.UploadString Returns 500 提交到 Web 服务 运行 在 IIS Express 上
WebClient.UploadString Returns 500 Submitting to Web Service Running On IIS Express
我正在使用 .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 服务 returns 结果来自:
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 服务代码,所有的工作都在那里,returns 结果通过 ReturnResponse
和所有看起来正确。但是,客户端站点然后抛出 500 错误 'The remote server returned an error: (500) Internal Server Error.',没有太多信息可以继续。
另外:如果客户端站点(运行 在我公司的计算机上)在 Web 上托管 Web 服务时提交到 Web 服务,则此代码可以正常工作(显然在 IIS 下 运行)。所以代码很好 - 在我看来 :) - 但只有当 Web 服务在本地 运行 时才会出现问题。
有人知道某种 security/configuration 设置可能会导致这种情况吗?正如我所说,它在多台个人计算机上运行良好,没有问题。
抛出的 500 异常是 HttpException
类型的,所以我阅读了响应并发现了这个错误消息:
Unable to make the session state request to the session state server.
Please ensure that the ASP.NET State service is started and that the
client and server ports are the same. If the server is on a remote
machine, please ensure that it accepts remote requests by checking the
value of
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection.
If the server is on the local machine, and if the before mentioned
registry value does not exist or is set to 0, then the state server
connection string must use either 'localhost' or
'127.0.0.1' as the server name.
所以我只需要打开 ASP.NET 状态服务。我可以在常规 inproc 会话中进行 web.config 转换,使 debug/local 简单地 运行,然后让发布构建使用 State Service(在我们的例子中是必需的),但将其转换目前在本地已经足够好了。
我正在使用 .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 服务 returns 结果来自:
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 服务代码,所有的工作都在那里,returns 结果通过 ReturnResponse
和所有看起来正确。但是,客户端站点然后抛出 500 错误 'The remote server returned an error: (500) Internal Server Error.',没有太多信息可以继续。
另外:如果客户端站点(运行 在我公司的计算机上)在 Web 上托管 Web 服务时提交到 Web 服务,则此代码可以正常工作(显然在 IIS 下 运行)。所以代码很好 - 在我看来 :) - 但只有当 Web 服务在本地 运行 时才会出现问题。
有人知道某种 security/configuration 设置可能会导致这种情况吗?正如我所说,它在多台个人计算机上运行良好,没有问题。
抛出的 500 异常是 HttpException
类型的,所以我阅读了响应并发现了这个错误消息:
Unable to make the session state request to the session state server. Please ensure that the ASP.NET State service is started and that the client and server ports are the same. If the server is on a remote machine, please ensure that it accepts remote requests by checking the value of HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection. If the server is on the local machine, and if the before mentioned registry value does not exist or is set to 0, then the state server connection string must use either 'localhost' or '127.0.0.1' as the server name.
所以我只需要打开 ASP.NET 状态服务。我可以在常规 inproc 会话中进行 web.config 转换,使 debug/local 简单地 运行,然后让发布构建使用 State Service(在我们的例子中是必需的),但将其转换目前在本地已经足够好了。