我想通过URL访问服务中公开的所有方法。 如果假设URL为:
http://localhost/MyService/MyService.svc
如何访问方法:
答案 0 :(得分:20)
要使用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工具导入并创建代理客户端。
答案 1 :(得分:8)
在没有服务参考的情况下回答如何操作。看看这里(选项#a):
您仍然需要一些引用(即对包含合同/接口的程序集的引用),但您不提供服务引用。
修改强> 虽然以上是可能的,但我不推荐它。当您必须生成这样的代理时,性能并不是很好。我通常使用svcutil.exe并创建一个包含我的客户端的程序集,并创建对该程序集的引用。这样,您可以有更多选项来控制代理的外观。
答案 2 :(得分:2)
您还可以使用WebClient类来调用WCF服务,而无需服务代理。实际上,您可以发送和接收字符串和二进制数据,还可以模拟POST。
我将它广泛用于可重用组件,开发人员可能无法创建所需的代理方法。可以使用here进行有效的POST比较。
答案 3 :(得分:1)
您可以使用 / 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>
答案 4 :(得分:0)
您只需提供服务的wsdl:http://localhost/MyService/MyService.svc?wsdl。
从wsdl,您可以生成代理类并在客户端上使用它们。