目前在公司有一个在 Windows azure 中运行的服务,我做了一些需要投入生产的更改,但是当我在 Azure 模拟器中运行该服务时,该服务无法正常工作。
在 Visual Studio 解决方案中,它看起来类似于以下内容:
Service1.svc.cs //<-- 包含所有实现的方法
Service1.svc
Service1.asmx //<-- 使用Service1.svc.cs中的逻辑
我的问题是,如果我不使用 windows azure 运行它,它可以完美运行,但是如果我从 windows azure 模拟器运行它,它就不能正常工作,结果会在另一个窗口中使用不同的端口打开。
例如,如果我在以下地址调用方法:
http://127.0.0.1:81/Service1.asmx
当我执行该方法时,它返回如下内容:
http://127.0.0.1:82/Service1.asmx/CurrentVersion
我读到,对于以前的版本,WCF 和负载均衡器存在问题,但在这种情况下,我使用的是 .NET 4.0 和 Azure 1.7。
在 web.config 中,我还添加了一些配置,其他论坛说它可以解决平衡器的问题。
<behaviors>
<serviceBehaviors>
<behavior name="DefaultServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<!-- Test from microsoft -->
<useRequestHeadersForMetadataAddress>
<defaultPorts>
<add scheme="http" port="81" />
<add scheme="https" port="444" />
</defaultPorts>
</useRequestHeadersForMetadataAddress>
</behavior>
</serviceBehaviors>
</behaviors>
有谁知道我应该如何解决这个问题?
下面是我的代码示例:
public class Service1 : IService1
{
public string CurrentVersion(string accountcode)
{
SiteServiceConfiguration sitecfg = GetSiteServiceConfiguration(accountcode);
return sitecfg.CurrentVersion;
}
}
[ServiceContract]
[WebService(Name = "Service1")]
[WebServiceBinding(Name = "ServiceSoap1", ConformsTo = WsiProfiles.BasicProfile1_1, EmitConformanceClaims = false)]
public interface IService1
{
[OperationContract]
[WebMethod]
string CurrentVersion(string accountcode);
}
其他信息:
这个 web 服务是从一个用 .NET 1.1 编写的应用程序调用的,而它升级到了一个更新的版本,我需要让这个服务工作。