2012-03-27 53 views
2

我有一个返回json的WCF服务。我想用Fiddle测试它(这是我在下面的教程中使用的应用程序)。问题是,例如,在调用“AddAngajat”时出现HTTP 404错误。使用JSON响应测试WCF

的服务实现:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single, AddressFilterMode=AddressFilterMode.Any)] 
    public class AngajatService : InterfaceAngajat 
    { 
     List<Angajat> listaAngajati =null; 

     public AngajatService() 
     { 
      if (listaAngajati == null) 
       listaAngajati = new List<Angajat>(); 
     } 

     [WebInvoke(Method="POST", UriTemplate = "AddAngajat", ResponseFormat=WebMessageFormat.Json)] 
     public void AddAngajat(Angajat angajat) 
     { 
      listaAngajati.Add(angajat); 
     } 
     public Angajat[] GetAllAngajati() 
     { 
      listaAngajati.Add(new Angajat() { idAngajat = "2f34", nume = "nume1" }); 
      return listaAngajati.ToArray(); 
     } 
    } 

的App.config:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0"/> 
    </system.web> 
    <system.serviceModel> 
    <services> 
     <service name="testJSON.AngajatService"> 
     <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" 
      contract="IMetadataExchange" /> 
     <endpoint address="json" behaviorConfiguration="JSONEndpointBehavior" 
      binding="webHttpBinding" bindingConfiguration="" contract="testJSON.InterfaceAngajat" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost/testJSON/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="JSONEndpointBehavior"> 
      <webHttp/> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
</configuration> 

关于如何解决此问题的任何想法?其他测试方法呢?

回答

1

您需要拨打http://localhost:8732/testJSON/json/AddAngajat,它应该工作。

否则包括您的客户端代码(或代码段)。

UPDATE

你提到的这个变化,URL必须是此http://localhost/testJSON/Service.svc/json/AddAngajat

+0

我使用Fiddler作为客户端。我的服务现在由本地IIS托管,所以我从URL中删除了端口。 http://localhost/testJSON/Service.svc返回好了,但我怎么能发送一个帖子请求,我如何发送参数? – 2012-03-27 09:39:18

+0

它不是WCF REST吗? – Aliostad 2012-03-27 09:55:08

+0

正在工作.....非常感谢。我是C#和widnows服务中的一个非常早期的开局者,所以我不知道是否是肥皂或休息服务。我会尽力学习更多。非常感谢。 – 2012-03-27 10:00:26

2

从小提琴手你的要求将类似于下面:

POST http://localhost/VirtualDirectoryName/testJson/service.svc/json/Addangajat HTTP/1.1 
Content-Type: application/json 
Content-Length: 47 

{"Id":6,"StringValue":"from client rajeshwin7"} 

假设你的结构对象 “Angajat”有2个属性Id和StringValue。

我不确定您是否可以对来自提琴手的卡西尼托管的服务执行GET/POST调用。我宁愿将其托管在IIS中,然后使用fiddler来调用该服务。如果您不想在IIS中托管,则使用带有HttpWebRequest的.NET客户端来调用其余服务。

+0

我的服务位于本地机器的IIS中。如果我从浏览器中调用http://localhost/testJSON/Service.svc/json/GetAllAngajati,我会得到“方法不允许”。作为回应。从Fiddler我想尝试:POST + http://localhost/testJSON/Service.svc/web/AddAngajat + HTTP/1.1,我发送{ “idAngajat”:“angajat1”, “nume”:“nume1” }请求标题:User-Agent:Fiddler Host:localhost Content-Type:application/json; charset = utf-8 内容长度:41 我仍然得到404。 – 2012-03-27 09:52:42