0

Wcf サービスと通信している Web アプリケーションと Android アプリケーションがあります。私のサービスの1つはChat.svcです

 [ServiceContract(Namespace = "http://webchat.com")]
public interface IChat
{
    [OperationContract]
    [WebInvoke(Method = "POST",
       ResponseFormat = WebMessageFormat.Json,
       RequestFormat = WebMessageFormat.Json,
       BodyStyle = WebMessageBodyStyle.Wrapped,
       UriTemplate = "Start")]
    StartChatResult StartChat(StartChatEntity sce);
}

および Chat.svc.cs

  public StartChatResult StartChat(StartChatEntity sce)
    {
        //doing something else

        List<tblChatRoom> list = ChatManager.GetChatRoomList();

        return new StartChatResult() { IsSuccess = true, ChatRooms = list };

    }

そして、私の ChatManager クラスからのこのメソッド

public static List<tblChatRoom> GetChatRoomList()
    {
        SessionDBDataContext db = new SessionDBDataContext();
        return db.tblChatRooms.ToList();
    }

Android 側から StartChat メソッドを呼び出すと、常に「Bad Request」応答が返されます。この行にコメントするとき

List<tblChatRoom> list = ChatManager.GetChatRoomList();

私は「OK」を持っています、問題ありません。この行に問題があります。また、SessionDBDataContext クラスは

[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="SessionDB")]
public partial class SessionDBDataContext : System.Data.Linq.DataContext
{

    private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();

    public SessionDBDataContext() : 
            base(global::System.Configuration.ConfigurationManager.ConnectionStrings["SessionDBConnectionString"].ConnectionString, mappingSource)
    {
        OnCreated();
    }

    public SessionDBDataContext(string connection) : 
            base(connection, mappingSource)
    {
        OnCreated();
    }

    public SessionDBDataContext(System.Data.IDbConnection connection) : 
            base(connection, mappingSource)
    {
        OnCreated();
    }

    public SessionDBDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
            base(connection, mappingSource)
    {
        OnCreated();
    }

    public SessionDBDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
            base(connection, mappingSource)
    {
        OnCreated();
    }

    public System.Data.Linq.Table<tblChatRoom> tblChatRooms
    {
        get
        {
            return this.GetTable<tblChatRoom>();
        }
    }

    public System.Data.Linq.Table<tblTalker> tblTalkers
    {
        get
        {
            return this.GetTable<tblTalker>();
        }
    }

    public System.Data.Linq.Table<tblSession> tblSessions
    {
        get
        {
            return this.GetTable<tblSession>();
        }
    }

    public System.Data.Linq.Table<tblMessagePool> tblMessagePools
    {
        get
        {
            return this.GetTable<tblMessagePool>();
        }
    }
}

SessionDB.dbml に問題があると思いますが、サービスメソッドではないメソッドを使って Chatroom リストを取得すれば問題ありません。サービスを呼び出すときに何が悪いのか理解できませんでした。助けてください

4

1 に答える 1

1

このコードをテストします: tblChatRoom などのクラスを作成します。例:

public class ChatRoom
{
    public string username;
    public string firstname;
    public string lastname;

    public ChatRoom(){}

    public ChatRoom(string username, string firstname, string lastname)
    {
         this.username = username;
         this.lastname = lastname;
         this.firstname = firstname;
    }
}

public StartChatResult StartChat(StartChatEntity sce)
{
    //doing something else

    List<ChatRoom> list =
         (from q in ChatManager.GetChatRoomList()
          select new ChatRoom(q.username, q.firstname, q.lastname)).ToList();

    return new StartChatResult() { IsSuccess = true, ChatRooms = list };

}
于 2012-07-26T21:33:36.647 に答える