如何通过改造发布到WCF服务

时间:2016-08-31 10:47:11

标签: android api wcf retrofit

我研究了许多页面,但没有什么可以回答我。 这是我在android上的代码

RaceAPI.java

@FormUrlEncoded
@POST("/Service1.svc/GetData1")
void GetData1(@Field("title") List<String> m, Callback<String> cb);

这是我发布数据的方式

  RestAdapter adapter = new RestAdapter.Builder()
            .setEndpoint("http://10.0.1.12:54253/")
            .build();
    final RaceAPI  race= adapter.create(RaceAPI.class);
    race.PostData(Arrays.asList("foo", "bar"), new Callback<String>() {
        @Override
        public void success(String s, Response response) {

        }

        @Override
        public void failure(RetrofitError error) {
            int a;
            a=1;
        }
    });

这是我的WCF服务签名

            [OperationContract]
            [WebInvoke(Method = "POST",
            ResponseFormat = WebMessageFormat.Json,
            RequestFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Wrapped,
            UriTemplate = "/PostData")]
            String PostData(List<String> m);

但我在改装回调失败()

上在Android上收到此错误
  

retrofit.RetrofitError:400 Bad Request

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

事实上,我在改装界面上做了一些改变。

在接口中为方法声明添加了Headers属性。

@Headers("Content-Type:application/json")
@POST("/Service1.svc/PostData")
void PostData(@Body SpeechModel m, Callback<SpeechModel> cb);

我使数据传递绑定到接口的主体。(我删除了@FormUrlEncoded)

我制作了自定义类来从服务器发送和检索。我无法发送字符串或字符串数​​组(可能有些东西。找不到它。)

   SpeechModel m = new SpeechModel();
        m.setSpeechId(5);
        m.setSpeechText("something");
        race.PostData(m, new Callback<SpeechModel>() {
            @Override
            public void success(SpeechModel PostDataResult, Response response) {

            }

            @Override
            public void failure(RetrofitError error) {
                int a;
                a=1;
            }
        });

WCF服务签名,更改了参数类型和返回类型。

  [OperationContract]
  [WebInvoke(Method = "POST",            
  RequestFormat = WebMessageFormat.Json,
  ResponseFormat = WebMessageFormat.Json,
  BodyStyle= WebMessageBodyStyle.Wrapped,
  UriTemplate = "/PostData")]
  SpeechModel PostData(SpeechModel m);