URLを介してサービスで公開されているすべてのメソッドにアクセスしたい。 URLが次のような場合:
http://localhost/MyService/MyService.svc
メソッドにアクセスするにはどうすればよいですか。
WCFサービスを使用するには、WCFクライアントプロキシを作成する必要があります。
Visual Studioでは、プロジェクトを右クリックして、コンテキストメニューから[サービス参照の追加]を選択します。接続するURLを入力すると、そのサービスが実行されている場合は、クライアントプロキシファイルが生成されます。
このファイルには通常、MyService Clientと呼ばれるクラスが含まれます-そのクラスをインスタンス化でき、自由にそのクライアントクラスで使用可能なすべてのメソッドを確認できます。
Visual Studioでサービス参照を追加したくない場合は、svcutil.exe
コマンドラインツールを実行して同じ結果を得ることができます。これにより、クライアントプロキシクラスに必要なすべてのファイルも生成されます。
マーク
更新:
実行時にクライアントプロキシを初期化する場合は、確実にそれを行うことができます。使用するバインディング(トランスポートプロトコル)と接続するアドレスを決定する必要があります。その後、次のことができます。
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://localhost:8888/MyService");
MyServiceClient serviceClient = new MyServiceClient(binding, address);
ただし、この場合でも、「サービス参照の追加」またはsvcutil.exeツールを使用して、最初にプロキシクライアントをインポートして作成する必要があります。
サービス参照なしでそれを行う方法に答えること。こちらをご覧ください(オプション#a):
まだいくつかの参照(つまり、コントラクト/インターフェイスを含むアセンブリへの参照)が必要ですが、サービス参照は作成しません。
EDIT:上記は可能ですが、お勧めしません。このようなプロキシを生成する必要がある場合、パフォーマンスは正確ではありません。通常、svcutil.exeを使用して、クライアントを含むアセンブリを作成し、そのアセンブリへの参照を作成します。これにより、プロキシの外観を制御するためのオプションが増えます。
あなたはそれを/ functionnameで呼び出します、例えば:
http://localhost/MyService/MyService.svc/ GetVersionNumber
編集:
ブラウザーから直接呼び出すことができるように、WCFサービスでメソッドをどのように構成しますか?
私はインターフェースを持っています:
[ServiceContract]
public interface IWebServiceImpl
{
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "GetVersionNumber")]
string GetVersionNumber();
そして、インターフェイスにGetVersionNumber
メソッドを実装するクラス:
public class WebServiceImpl
{
public string GetVersionNumber()
{
return "1.0.0.0"; //In real life this isn't hard-coded
}
}
最後に、Web.configの構成を次に示します。
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="true" logMalformedMessages="false" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="false" maxMessagesToLog="3000" maxSizeOfMessageToLog="2000"/>
</diagnostics>
<bindings>
<webHttpBinding>
<binding name="webBinding">
<security mode="Transport"/>
</binding>
</webHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceBehaviour" name="YOURWebServiceNameSpace.WebServiceImpl">
<endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" contract="YOURWebServiceNameSpace.IWebServiceImpl"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
あなたはあなたのサービスのwsdlを提供することができます: http://localhost/MyService/MyService.svc?wsdl 。
Wsdlからプロキシクラスを生成し、クライアントで使用できます。