.NET 4.0 で Web サービスを構築する必要がある既存の Java クライアントがあります。インターフェイスはすでに WSDL ファイルで定義されているので、クラス ライブラリを作成し、WSCF.blueを使用してサーバー側スタブを生成しました(svcutil も試しましたが成功しませんでした)。WSCF.blue は参照とファイルの追加を処理します (優れたツール :-)) ので、生成された System.NotImplementedException をいくつかのコードに置き換えただけです。次に、ASP.NET 開発サーバーで結果をホストしました。
有名な「コントラクト名 'WsdlWebService.IHello' が、サービス 'Hello' によって実装されたコントラクトのリストに見つかりませんでした。」ブラウザーでサービスを検索するとき ( WCF コントラクト名 'IMyService' が見つかりませんでした?を参照してください)。しかし、これは ServiceContractAttribute であり、それが仕事をすることを期待しています。
誰かが私が欠けているものを指摘できれば幸いです...
これは、生成されたインターフェイスと実装です。
namespace WsdlWebService
{
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://webservice.com", ConfigurationName="IHello")]
public interface IHello
{
[System.ServiceModel.OperationContractAttribute(Action="http://webservice.com/IHello/helloName", ReplyAction="http://webservice.com/IHello/helloNameResponse")]
[System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
[return: System.ServiceModel.MessageParameterAttribute(Name="helloNameReturn")]
string helloName(string name);
}
[System.ServiceModel.ServiceBehaviorAttribute(InstanceContextMode=System.ServiceModel.InstanceContextMode.PerCall, ConcurrencyMode=System.ServiceModel.ConcurrencyMode.Single)]
public class Hello : IHello
{
public virtual string helloName(string name)
{
return "Hello world from (via wsdl extraced server) " + name + "!";
}
}
}
これは web.config です。
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="false" targetFramework="4.0" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceTypeBehaviors">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="WsdlWebService.Hello"
behaviorConfiguration="MyServiceTypeBehaviors">
<endpoint address="" binding="basicHttpBinding"
contract="WsdlWebService.IHello"/>
<endpoint contract="IMetadataExchange"
binding="mexHttpBinding" address="mex"/>
</service>
</services>
</system.serviceModel>
</configuration>