C# JSON C Web服务的创建和测试?

C# JSON C Web服务的创建和测试?,c#,mysql,json,web-services,C#,Mysql,Json,Web Services,我正在尝试创建JSON WCF web服务。 我完全不清楚整个过程真的!我正在连接服务器上的MySQL数据库。 因此,我有以下代码: 我的界面- [ServiceContract] public interface IService1 { [OperationContract] [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, RequestFormat =

我正在尝试创建JSON WCF web服务。 我完全不清楚整个过程真的!我正在连接服务器上的MySQL数据库。 因此,我有以下代码: 我的界面-

    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/GetAllResources")]
        List<Resources> GetAllResources();


        [OperationContract]
        [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/AddRoom")]
        void AddRoom(string location, string name);
...
我的服务-

[ScriptService]
        public class Service1 : IService1
    {

            [WebMethod]
            [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
            public void AddRoom(string location, string name)
            {
                String conString = System.Configuration.ConfigurationManager.ConnectionStrings["MyDatabaseConnectionString"].ConnectionString;
                using (MySqlConnection cnn = new MySqlConnection(conString))
                {
                    cnn.Open();
                    String sql = String.Format("INSERT INTO rooms(roomLocation, roomName) VALUES ({0}, {1});", location, name);
                    MySqlCommand cmd = new MySqlCommand(sql, cnn);
                    //doesn't return any rows
                    cmd.ExecuteNonQuery();
                }              
            }

            [WebMethod]
            [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
            public List<Resources> GetAllResources()
            {
                String conString = System.Configuration.ConfigurationManager.ConnectionStrings["MyDatabaseConnectionString"].ConnectionString;
                List<Resources> al = new List<Resources>();
                using (MySqlConnection cnn = new MySqlConnection(conString))
                {
                    cnn.Open();
                    String sql = String.Format("select * from resources");
                    MySqlCommand cmd = new MySqlCommand(sql, cnn);
                    MySqlDataReader reader = cmd.ExecuteReader();

                    while (reader.Read())
                    {
                        al.Add((Resources)reader[0]);
                    }
                    return al;
                }
            }
...
网页配置-

...
<system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="5000"/>
      </webServices>
    </scripting>
  </system.web.extensions>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="RoomBookingService.Service1" behaviorConfiguration="RoomBookingServiceBehavior">
        <endpoint address="../Service1.svc"
            binding="webHttpBinding"
            contract="RoomBookingService.IService1"
            behaviorConfiguration="webBehaviour" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="RoomBookingServiceBehavior">
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="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="webBehaviour">
          <webHttp automaticFormatSelectionEnabled="true"/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
...
这是正确的吗??我可以使用什么工具来测试服务?我已经把它放到服务器上,并尝试下载了一些测试工具,但他们没有给我任何错误,只是它没有返回JSON

我将创建一个Android应用程序来与该服务对话,但由于这也是一个学习曲线,我想在添加另一层复杂性之前知道我的服务是否正常工作

如果您对我的代码或问题有任何帮助或意见,我们将不胜感激。
感谢您抽出时间

我设法让它工作了: 这是我的密码: 合同:

服务

网络配置

还不是每件事都很清楚,但它正在工作!!因此,我同意这一点:-


谢谢

您可以使用fiddler之类的工具来测试服务。您是否在服务呼叫中添加内容类型:json?谢谢。好的,我去查一下小提琴手。不,我一直在使用软件进行测试,比如Rest客户机主机和JSON WebService Tester主机。所以我没有指定内容类型。我只是想看到json被返回。
    namespace RoomBookingService
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetAllResources")]
        String GetAllResources();
[WebMethod]
            [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public String GetAllResources()
            {
                String conString = System.Configuration.ConfigurationManager.ConnectionStrings["MyDatabaseConnectionString"].ConnectionString;
                List<Dictionary<string, object>> tableRows = new List<Dictionary<string, object>>();
                Dictionary<string, object> row= new Dictionary<string,object>();
                DataTable dt = new DataTable();
                System.Web.Script.Serialization.JavaScriptSerializer serializer =
          new System.Web.Script.Serialization.JavaScriptSerializer();

                try
                {
                    using (MySqlConnection cnn = new MySqlConnection(conString))
                                    {                                        
                                        cnn.Open();
                                        String sql = String.Format("select resourceID, resourceName, resourceDesc, roomID from resources");
                                        MySqlCommand cmd = new MySqlCommand(sql, cnn);
                                        MySqlDataReader reader = cmd.ExecuteReader();
                                        dt.Load(reader);

                                        foreach (DataRow dr in dt.Rows)
                                        {
                                            row = new Dictionary<String, Object>();
                                            foreach (DataColumn col in dt.Columns)
                                            {
                                                row.Add(col.ColumnName, dr[col]);
                                            }
                                            tableRows.Add(row);
                                        }
                                        return serializer.Serialize(tableRows);
                                    }
                }
                catch (Exception ex)
                {
                    return ex.ToString();
                }            
            }
 <system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="5000"/>
      </webServices>
    </scripting>
  </system.web.extensions>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="RoomBookingService.Service1" behaviorConfiguration="RoomBookingServiceBehavior">
        <endpoint address=""
            binding="webHttpBinding"
            contract="RoomBookingService.IService1"
            behaviorConfiguration="webBehaviour" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="RoomBookingServiceBehavior">
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="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="webBehaviour">
          <webHttp automaticFormatSelectionEnabled="true"/>
        </behavior>
      </endpointBehaviors>