在我的MVC Web应用程序中,一个控制器功能(Validate)调用服务。请参阅下面的代码并注意MessageHandlerClient是在Visual Studio中生成的服务代理。服务代理调用client.ValidateMessage(formdataasbson [“HLmessage”]。ToString())在我的本地开发环境中正常工作。当我将项目发布到Azure时,对Validate controller函数的调用不再起作用。怀疑代理问题,我更改了Validate()以返回硬编码结果,重新发布到Azure,并且一切正常 - 确认Azure中的Web服务代理行为存在问题。
[HttpPost]
public ActionResult Validate(String serializedformdata)
{
try
{
BsonDocument formdataasbson = this.serializer.JSONFormtoBSON(serializedformdata);
MessageHandlerClient client = new MessageHandlerClient();
this.jsonresponse.ReturnValue = "true";
StandaloneValidator.My_ServiceReference.Error[] results = client.ValidateMessage(formdataasbson["HLmessage"].ToString());
this.jsonresponse.ReturnMessage = results.ToJson();
return Json(this.jsonresponse);
}
catch (Exception ex)
{
this.jsonresponse.ReturnValue = "false";
this.jsonresponse.ReturnMessage = ex.Message;
return Json(this.jsonresponse);
}
}
更重要的是,我在本地web.config文件中看到了Web服务代理的详细信息,如下所示(IP故意模糊):
我已经阅读了有关Azure中web.config的各种帖子以及它不可写的事实,所以我怀疑我的本地.....代理信息永远不会在Azure中发布。如果web.config确实没有从本地发布到Azure,那么我理解为什么我的代理不起作用。问题是.....我该怎么做才能解决?!
编辑:我看到各种帖子讨论了将一些设置从web.config迁移到Azure的csfg文件 - 这可能是一个可行的解决方案吗?鉴于我没有编写手动读取这些设置的编码(我只是创建了从URL到服务的服务代理),我担心自动生成的代码或服务的任何“底层”行为,不知道如何从中读取迁移的设置csfg。答案 0 :(得分:1)
根据您上面所写的内容,您似乎对Web角色和网站感到困惑。首先,您需要了解这两者之间的区别,以便您可以更好地决定应用程序的选择。以下是一些有用的链接:
Windows Azure网站,您无法完全控制IIS Web服务器,因此某些设置的网站特定设置是可配置的,而其他设置则不可配置。在Windows Azure网站中,添加到web.config中的大多数计算机和系统特定设置都会被覆盖,因此这些设置不起作用。此外,您也无法对您的Azure网站实例进行RDP。
如果必须使用必须代理配置的ASP.NET MVC应用程序,则必须将其部署到Windows Azure Cloud Service。