使用 WCF 创建通用休息服务
Create a generic rest service using WCF
我在我的服务器上使用 WCF,在我的客户端上使用 angularjs,当我调用我的服务时出现以下错误:
GET http://localhost:1471/majsvc/RechercherUneListe/1/1 net::ERR_CONNECTION_RESET
网上找了一些答案,好像连载有问题
这是我的接口声明:
[OperationContract]
[WebGet(UriTemplate = "RechercherUneListe/{id_utilisateur}/{type}", ResponseFormat = WebMessageFormat.Json)]
List<object> RechercherUneListe(string id_utilisateur, string type);
和服务:
public List<object> RechercherUneListe(string id_utilisateur, string type)
{
List<object> retour = new List<object>();
try{
int type_liste = System.Convert.ToInt32(type);
switch(type_liste)
{
case MetierPD1.Constantes.ConstantesListes.LISTE_MESSAGE_RECUS:
retour = ServicesMessagerie.RechercherLesMessagesRecus(id_utilisateur).ToList<object>();
break;
}
}catch(Exception erreur)
{
Transverse.Helper.Exception(this.GetType() + " > " + MethodInfo.GetCurrentMethod(), erreur);
}
return retour;
}
我在 JS 中的调用:
this.RechercherListe = function(type, id_utilisateur){
var uri = this.getServerUriMaj() + "RechercherUneListe/"+id_utilisateur+"/"+type;
return $http.get(uri)
.success(function(data, status, headers, config) {
// this callback will be called asynchronously
// when the response is available
return data;
}).
error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
return "";
});
}
class的一个例子我尝试在对象中转换:
[DataContract]
[Serializable()]
public class MessageEmail
{
[DataMember]
int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
}
所以我的想法是只创建一个服务来获取我的所有列表(我正在创建一个包含大量表和数据的应用程序)并在服务参数中传递数据类型。
我的函数在 returns 的情况下调用了 "MessageEmail" 的列表。但是因为我需要一个通用对象,所以我尝试将它转换为对象列表和 returns 个对象。
为什么我的代码不起作用?我忘了什么吗?也许我不能像这样转换我的对象?
我在服务器上没有任何错误,它 returns 正确的列表(我已经用调试器检查过),错误发生在我的 javascript 客户端上。
注意:当我返回 MessageEmail 列表(未转换为对象)时,我的服务正常工作
**编辑:**使用提琴手:
ReadResponse() failed: The server did not return a response for this request. Server returned 0 bytes.
Properties :
SESSION STATE: Aborted.
Response Entity Size: 512 bytes.
== FLAGS ==================
BitFlags: [ClientPipeReused, ResponseGeneratedByFiddler] 0x108
X-ABORTED-WHEN: Done
X-CLIENTIP: 127.0.0.1
X-CLIENTPORT: 2143
X-EGRESSPORT: 2149
X-FAILSESSION-WHEN: ReadingResponse
X-HOSTIP: ::1
X-PROCESSINFO: nw:1348
X-RETRYONFAILEDRECEIVE: *
X-SERVERSOCKET: REUSE ServerPipe#13*NEW*
== TIMING INFO ============
ClientConnected: 17:02:05.381
ClientBeginRequest: 17:02:06.792
GotRequestHeaders: 17:02:06.792
ClientDoneRequest: 17:02:06.792
Determine Gateway: 0ms
DNS Lookup: 0ms
TCP/IP Connect: 0ms
HTTPS Handshake: 0ms
ServerConnected: 17:02:07.784
FiddlerBeginRequest: 17:02:07.784
ServerGotRequest: 17:02:07.784
ServerBeginResponse: 00:00:00.000
GotResponseHeaders: 00:00:00.000
ServerDoneResponse: 17:02:07.815
ClientBeginResponse: 17:02:07.815
ClientDoneResponse: 17:02:07.815
Overall Elapsed: 0:00:01.023
The response was buffered before delivery to the client.
谢谢
学习本文后:http://benjii.me/2010/05/how-to-return-multiple-formats-with-wcf-including-xml-json-and-atom/
我添加了以下行:
[ServiceKnownType(typeof(List<MessageEmail>))]
它现在似乎可以工作了。
我在我的服务器上使用 WCF,在我的客户端上使用 angularjs,当我调用我的服务时出现以下错误:
GET http://localhost:1471/majsvc/RechercherUneListe/1/1 net::ERR_CONNECTION_RESET
网上找了一些答案,好像连载有问题
这是我的接口声明:
[OperationContract]
[WebGet(UriTemplate = "RechercherUneListe/{id_utilisateur}/{type}", ResponseFormat = WebMessageFormat.Json)]
List<object> RechercherUneListe(string id_utilisateur, string type);
和服务:
public List<object> RechercherUneListe(string id_utilisateur, string type)
{
List<object> retour = new List<object>();
try{
int type_liste = System.Convert.ToInt32(type);
switch(type_liste)
{
case MetierPD1.Constantes.ConstantesListes.LISTE_MESSAGE_RECUS:
retour = ServicesMessagerie.RechercherLesMessagesRecus(id_utilisateur).ToList<object>();
break;
}
}catch(Exception erreur)
{
Transverse.Helper.Exception(this.GetType() + " > " + MethodInfo.GetCurrentMethod(), erreur);
}
return retour;
}
我在 JS 中的调用:
this.RechercherListe = function(type, id_utilisateur){
var uri = this.getServerUriMaj() + "RechercherUneListe/"+id_utilisateur+"/"+type;
return $http.get(uri)
.success(function(data, status, headers, config) {
// this callback will be called asynchronously
// when the response is available
return data;
}).
error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
return "";
});
}
class的一个例子我尝试在对象中转换:
[DataContract]
[Serializable()]
public class MessageEmail
{
[DataMember]
int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
}
所以我的想法是只创建一个服务来获取我的所有列表(我正在创建一个包含大量表和数据的应用程序)并在服务参数中传递数据类型。 我的函数在 returns 的情况下调用了 "MessageEmail" 的列表。但是因为我需要一个通用对象,所以我尝试将它转换为对象列表和 returns 个对象。
为什么我的代码不起作用?我忘了什么吗?也许我不能像这样转换我的对象?
我在服务器上没有任何错误,它 returns 正确的列表(我已经用调试器检查过),错误发生在我的 javascript 客户端上。
注意:当我返回 MessageEmail 列表(未转换为对象)时,我的服务正常工作
**编辑:**使用提琴手:
ReadResponse() failed: The server did not return a response for this request. Server returned 0 bytes.
Properties :
SESSION STATE: Aborted.
Response Entity Size: 512 bytes.
== FLAGS ==================
BitFlags: [ClientPipeReused, ResponseGeneratedByFiddler] 0x108
X-ABORTED-WHEN: Done
X-CLIENTIP: 127.0.0.1
X-CLIENTPORT: 2143
X-EGRESSPORT: 2149
X-FAILSESSION-WHEN: ReadingResponse
X-HOSTIP: ::1
X-PROCESSINFO: nw:1348
X-RETRYONFAILEDRECEIVE: *
X-SERVERSOCKET: REUSE ServerPipe#13*NEW*
== TIMING INFO ============
ClientConnected: 17:02:05.381
ClientBeginRequest: 17:02:06.792
GotRequestHeaders: 17:02:06.792
ClientDoneRequest: 17:02:06.792
Determine Gateway: 0ms
DNS Lookup: 0ms
TCP/IP Connect: 0ms
HTTPS Handshake: 0ms
ServerConnected: 17:02:07.784
FiddlerBeginRequest: 17:02:07.784
ServerGotRequest: 17:02:07.784
ServerBeginResponse: 00:00:00.000
GotResponseHeaders: 00:00:00.000
ServerDoneResponse: 17:02:07.815
ClientBeginResponse: 17:02:07.815
ClientDoneResponse: 17:02:07.815
Overall Elapsed: 0:00:01.023
The response was buffered before delivery to the client.
谢谢
学习本文后:http://benjii.me/2010/05/how-to-return-multiple-formats-with-wcf-including-xml-json-and-atom/
我添加了以下行:
[ServiceKnownType(typeof(List<MessageEmail>))]
它现在似乎可以工作了。