使用 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>))]

它现在似乎可以工作了。