現在、会社には Windows azure で実行されているサービスがあります。本番環境に移行する必要があるいくつかの変更を行いましたが、これを Azure Emulator で実行するとサービスが正しく動作しません。
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 で記述されたアプリケーションから呼び出されますが、サービスを動作させるために必要な新しいバージョンにアップグレードされます。