当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.
帮助。我被卡住了。谢谢
答案 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;
}
}
答案 1 :(得分:0)
您具有
的端点配置<endpointBehaviors>
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
,但是没有端点使用它。
选择一个端点并使用此行为。现在,它已经死了,没有使用过的XML。