从Android消费WCF

时间:2018-08-18 17:26:08

标签: wcf

当Windows应用程序使用Web SeviceReference进行调用时,我有一个在IIS上运行的WCF API。当由Android应用程序调用时,我不尝试使其工作。我假设我可以从Web浏览器或Fiddler“测试”本来可以正常工作的API,以确保我的调用语法正确,但是当我尝试时,出现404错误。

我的Web服务Web.config serviceModel如下:

 <system.serviceModel>
<protocolMapping>
  <add scheme="http" binding="basicHttpBinding"/>
</protocolMapping>

<services>
  <service name="TaskTrackerAppService.Service1" behaviorConfiguration="ServiceBehavior">
    <endpoint address="" binding="basicHttpBinding"  contract="TaskTrackerAppService.IAppWebService"></endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" bindingConfiguration=""></endpoint>
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceMetadata httpGetEnabled="true" />
    </behavior>
    <behavior>
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="webBehavior">
      <webHttp />
    </behavior>
  </endpointBehaviors>
</behaviors>

<bindings>
  <basicHttpBinding>

  </basicHttpBinding>
</bindings>

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

当我进入浏览器时:

http://localhost:51276/AppWebService.svc and 
http://localhost:51276/AppWebService.svc?wsdl

我确实获得了预期的WSDL响应。 (从我的本地主机和运行此WCF的托管Web服务器。)

所以接下来我添加请求:

 http://localhost:51276/AppWebService.svc/SayHello/1000

SayHello将在其中返回确认userId 1000存在的信息。然后我回来:

404 - The resource cannot be found

我也尝试过:

http://localhost:51276/AppWebService.svc/SayHello?userId=1000 etc.

帮助。我被卡住了。谢谢

2 个答案:

答案 0 :(得分:0)

您知道,我们需要生成客户端代理类以调用传统的wcf服务。我们可以使用以下方式。  1.添加服务参考。或使用svcutil.exe生成客户端代理类。  2.使用Channel工厂。 虽然这些方法都需要客户端代理类。如果要以URL的形式调用特定的操作,则需要将WCF托管为http-web模式。这要求我们使用webservicehost或webhttpbinding。我做了一个演示。希望对您有用。 服务器。

 class Program
{
    static void Main(string[] args)
    {
        WebServiceHost host = new WebServiceHost(typeof(MyService));
        host.AddServiceEndpoint(typeof(IService), new WebHttpBinding(), "http://localhost:9090");
        host.Open();
        Console.WriteLine("Service is ready");
        Console.ReadKey();
        host.Close();
    }
}
[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)]
    string SayHi(int id);
}
public class MyService : IService
{
    public string SayHi(int id)
    {
        Console.WriteLine("Wow, I have been called");
        return "Hello Stranger "+id;
    }
}

Result Here is official document

答案 1 :(得分:0)

您具有

的端点配置
<endpointBehaviors>
    <behavior name="webBehavior">
        <webHttp />
    </behavior>
</endpointBehaviors>

,但是没有端点使用它。

选择一个端点并使用此行为。现在,它已经死了,没有使用过的XML。