SOAP Webサービスを使用してasp.netサーバーと通信するiosアプリケーションを作成しています。私のWebサービスの1つは、オブジェクトの配列を取る必要があります。オブジェクト定義は両側で全く同じです。iphone appのオブジェクト配列を.net SOAP webserviceにパラメータとして渡すことができません。
私が試したことは次のとおりです。パラメーターとして1つのオブジェクトだけを渡したとき、Webサービスはうまくいきました。しかし、オブジェクトの配列を渡すとすぐに、私は何も返されません。 Webサービス内のコードが決して呼び出されないということは、サーバーがパラメータを読み取ることができなかったことを意味します。有線のものは、Webサービスが何も返されなかったので何が間違っているのかを知ることができません(過去に何か間違ったことをしたときにスタックトレースを表示するサーバからエラーメッセージを受け取っていました)。
私はSOAP Webサービスに精通していないので、MSDNで多くの時間を費やしましたが、何が間違っているのかまだ分かりませんでした。 Webサービスを公開した後、私はブラウザからアクセスしました。私はすべてのものを私のiOSアプリにコピーしたので、理論上はうまくいくはずだが、それは決してしなかった。
とにかく、これは、サーバー側のコードです:
[System.Web.Services.Protocols.SoapRPCMethod]
[WebMethod(EnableSession = true)]
[XMLInclude(typeof(Team))]
[XMLInclude(typeof(Team[]))]
[SoapInclude(typeof(Team))]
[SoapInclude(typeof(Team[]))]
public string testTeamWebService(Team[] teams)
{
// do something here
}
// class definition of Team
[Serializable]
public class Team
{
public int TeamID;
public string TeamName;
}
は、Webサービスのページ(の.asmxファイル)によると、ここで私はそれを呼び出すために何をすべきかです:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="https://abc.com/" xmlns:types="https://abc.com/encodedTypes" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<tns:testTeamWebService>
<teams href="#id1" />
</tns:testTeamWebService>
<soapenc:Array id="id1" soapenc:arrayType="types:Team[2]">
<Item href="#id2" />
<Item href="#id3" />
</soapenc:Array>
<types:Team id="id2" xsi:type="types:Team">
<TeamID xsi:type="xsd:int">int</TeamID>
<TeamName xsi:type="xsd:string">string</TeamName>
</types:Team>
<types:Team id="id3" xsi:type="types:Team">
<TeamID xsi:type="xsd:int">int</TeamID>
<TeamName xsi:type="xsd:string">string</TeamName>
</types:Team>
</soap:Body>
</soap:Envelope>
として、私は言った、私はXMLを構築し、iOSで送信します。私はNSMutableURLRequestオブジェクトを使用し、構築されたXMLは上記の方法とまったく同じです。
私の他のWebサービスでは、サーバーからオブジェクト配列を取得するので、.netは配列をシリアル化できます。これは私のサービスがパラメータとして配列をとる必要があるのは初めてのことです。そのためには、その方法が必要であると思います。
あなたの読書をありがとうと私にできることならいくつかのアドバイスをお願いします。
私は最終的にサーバーからのエラーメッセージました:私は本当にあなたの問題を解決する方法を知っているが、ちょうどあなたができない場合には、それを取得する必要があり、取ることはありません
faultcode: soap:Server
faultstring: System.Web.Services.Protocols.SoapException: Server was unable to process request.---> System.ArgumentException: Object of type 'System.Xml.XmlNode[]' cannot be converted to type 'abc.WebServices.Team[]'.
at System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr)
at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Web.Services.Protocols.LogicalMethodInfo.Invoke(Object target, Object[] values)
at System.Web.Services.Protocols.WebServiceHandler.Invoke()
--- End of inner exception stack trace ---
detail:
配列の型がstringの場合、どうすればよいですか?このような? team1 team2 –
Skychan
更新:上記は私のために完全に働きました – Skychan