C# JSON C Web服务的创建和测试?
我正在尝试创建JSON WCF web服务。 我完全不清楚整个过程真的!我正在连接服务器上的MySQL数据库。 因此,我有以下代码: 我的界面-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 =
[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>