Udało mi się odczytać prawidłowo ID sesji oraz token:
protected function loginResult_resultHandler(event:ResultEvent):void
{
var xmlIdSesji:XML = event.headers[0];
var xmlToken:XML = event.headers[1];
txtTest.text = xmlToken.@*.toXMLString();
idSesji = xmlIdSesji.@*.toXMLString();
token = xmlToken.@*.toXMLString();
}
Niestety nadal nie mam zielonego pojęcia jak umieścić XMLa z danymi do wysłania.
EDIT:
Zmieniłem podejście do problemu, postanowiłem stworzyć własny serwis, który w odpowiedzi zwróci w sposób jawny informacje, które mnie interesują. Serwis tworzę w .net 3.5. Authoryzacja poszła bezbłędnie, mam problem z uzyskaniem statusu CWU. Metody za to odpowiedzialne wyglądają tak:
private void SprawdzStatus(string pesel)
{
// przygotowanie pytania
XmlDocument doc = new XmlDocument();
doc.LoadXml(GenerujPytanie(pesel));
XmlElement pytanieXml = doc.DocumentElement;
// obiekt transmisyjny
ServiceBroker broker = new ServiceBrokerClient();
// blok zapytania
ServiceRequest request = new ServiceRequest()
{
date = DateTime.Now,
location = new WSServiceBroker.ServiceLocation()
{
@namespace = "nfz.gov.pl/ws/broker/cwu",
localname = "checkCWU",
version = "3.0",
},
payload = new Payload() //Ładunek z pytaniem
{
textload = pytanieXml
}
};
WSServiceBroker.session sesja = new WSServiceBroker.session();
sesja.id = loginResp.session.id;
WSServiceBroker.authToken token = new WSServiceBroker.authToken();
token.id = loginResp.authToken.id;
executeServiceRequest esReq = new executeServiceRequest(sesja, token, request);
executeServiceResponse response; // odpowiedź z webserwisu
try
{
response = broker.executeService(esReq);
}
catch (SoapException ex)
{
EwusException wyjatek = EwusException.Wyodrebnij(ex);
throw wyjatek;
}
//z response wyciągamy dane
//return response.payload.textload.OuterXml;
odp.StatusXml = response.executeServiceReturn.payload.textload.InnerXml;
}
private string GenerujPytanie(string pesel)
{
// paczka z pytaniem CWU
status_cwu_pyt pytanie = new status_cwu_pyt();
pytanie.system_swiad = new system()
{
nazwa = "System",
wersja = "1.0"
};
pytanie.numer_pesel = pesel;
return SerializujDane(pytanie);
}
Klasa status_cwu_pyt wygląda tak:
[System.SerializableAttribute()]
public partial class status_cwu_pyt
{
private string numer_peselField;
private system system_swiadField;
/// <uwagi/>
public string numer_pesel
{
get
{
return this.numer_peselField;
}
set
{
this.numer_peselField = value;
}
}
/// <uwagi/>
public system system_swiad
{
get
{
return this.system_swiadField;
}
set
{
this.system_swiadField = value;
}
}
}
/// <uwagi/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "https://ewus.nfz.gov.pl/ws/broker/ewus/status_cwu/v2")]
public partial class system
{
private string nazwaField;
private string wersjaField;
/// <uwagi/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string nazwa
{
get
{
return this.nazwaField;
}
set
{
this.nazwaField = value;
}
}
/// <uwagi/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string wersja
{
get
{
return this.wersjaField;
}
set
{
this.wersjaField = value;
}
}
}
i niestety dostaję dziwną zwrotkę, z którą nie wiem jak sobie poradzić:
System.ServiceModel.FaultException`1[[EwusWS.WSServiceBroker.ServiceException, EwusWS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]: org.apache.axis2.databinding.ADBException: Unexpected subelement numer_pesel
Server stack trace:
w System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
w System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
w System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
w System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
w System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
w System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
w System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
w EwusWS.WSServiceBroker.ServiceBroker.executeService(executeServiceRequest request)
w EwusWS.WSServiceBroker.ServiceBrokerClient.EwusWS.WSServiceBroker.ServiceBroker.executeService(executeServiceRequest request) w c:\users\leszek\documents\visual studio 2010\Projects\EwusWS\Service References\WSServiceBroker\Reference.cs:wiersz 695
w EwusWS.EWUS.SprawdzStatus(String pesel) w C:\Users\Leszek\Documents\Visual Studio 2010\Projects\EwusWS\EwusWS.asmx.cs:wiersz 161
w EwusWS.EWUS.SprawdzPacjenta(String login, String pass, String pesel) w C:\Users\Leszek\Documents\Visual Studio 2010\Projects\EwusWS\EwusWS.asmx.cs:wiersz 32
dodam, że w trakcie debugowania payload wygląda tak:
<numer_pesel>***********</numer_pesel>
<system_swiad nazwa="System" wersja="1.0" />