使用WCF创建通用休息服务

时间:2015-01-03 11:21:39

标签: c# angularjs 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 "";
        });
    }

我尝试在对象中转换的类的示例:

[DataContract]
[Serializable()]
public class MessageEmail
{   
    [DataMember]
    int _id;
    public int Id
    {
        get { return _id; }
        set { _id = value; }
    }
}

所以我的想法是只创建一个服务来获取我的所有列表(我创建一个包含大量表和数据的应用程序)并在服务参数中传递数据类型。 我在这种情况下调用的函数返回一个&#34; MessageEmail&#34;的List。但是因为我需要有一个通用对象,所以我试图将它转换为对象列表并返回对象。

为什么我的代码不起作用?我忘记了什么吗?也许我不能像这样转换我的对象?

我没有在服务器上出现任何错误,它返回正确的列表(我已经使用调试器检查过),错误发生在我的javascript客户端上。

注意:当我返回MessageEmail列表(没有转换为对象)时,我的服务正常工作

**编辑:**使用fiddler:

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.

谢谢

1 个答案:

答案 0 :(得分:0)

学完本文后:http://benjii.me/2010/05/how-to-return-multiple-formats-with-wcf-including-xml-json-and-atom/

我添加了以下行:

[ServiceKnownType(typeof(List<MessageEmail>))]

它似乎现在有效。