Zdravím. Potřebuju nakopnout správným směrem. Snažím se udělat klienta webové služby. Teprve se to učím a nějak se mi nedaří najít ty správné příklady a návody. Veškeré, co jsem našel, popisují primitivní příkládky, ze kterých mi není jasné, jak zavolat poněkud obsáhlejší službu. Konkrétně se mi jedná o služby portálu farmáře:
http://eagri.cz/public/web/mze/farmar/elektronicka-vymena-dat/prehled-vystavenych-sluzeb/
Dejme tomu třeba:
https://eagri.cz/ssl/nosso-app/EPO/WS/Online/vOKOsrv.aspx?SERVICEID=LPI_GPL01A
Optimálně s asynchronním voláním.
Já jsme si tuto službu přidal do řešení a vygeneroval se mi pro ni soubor "Reference.cs". Pak jsem tak nějak předpokládal, že mi bude stačit vyrobit objekt, naplnit parametry, zavolat proces a přečíst odpověď. Zatím synchronně. Jenže ouha, hned na prvním řádku, kde se snažím vytvořit instanci mi to zhebne na výjimku.
Výjimka:
System.InvalidOperationException was unhandled by user code
Message=Nelze najít výchozí element koncového bodu, který odkazuje na kontrakt
CiselnikPlodin.LPI_GPL01A v oddílu konfigurace klienta třídy ServiceModel. Může to být
proto, že pro aplikaci nebyl nalezen konfigurační soubor, nebo v elementu klienta
nebylo možné najít element koncového bodu odpovídající tomuto kontraktu.
Source=System.ServiceModel
StackTrace:
v System.ServiceModel.Description.ConfigLoader.LoadChannelBehaviors(ServiceEndpoint serviceEndpoint, String configurationName)
v System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName, Configuration configuration)
v System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName)
v System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address)
v System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress)
v System.ServiceModel.EndpointTrait`1.CreateSimplexFactory()
v System.ServiceModel.ClientBase`1.CreateChannelFactoryRef(EndpointTrait`1 endpointTrait)
v System.ServiceModel.ClientBase`1.InitializeChannelFactoryRef()
v System.ServiceModel.ClientBase`1..ctor()
v CiselnikPlodin.LPI_GPL01AClient..ctor() v C:\zdrojaky\Service References\CiselnikPlodin\Reference.cs:řádek 1554 // !!! zde je prázdný konstruktor: public LPI_GPL01AClient() { } !!!
v program.CiselnikPlodin() v C:\zdrojaky\program.cs:řádek 177
InnerException:
Můj zamýšlený kód - možná úplně mimo mísu:
public string CiselnikPlodin()
{
CiselnikPlodin.LPI_GPL01AClient cp = new CiselnikPlodin.LPI_GPL01AClient(); // !!! výjimka !!! řádek 177
CiselnikPlodin.processRequest rq = new CiselnikPlodin.processRequest();
rq.Request.AppInfo.AppModule.id = "Moje aplikace"; // TODO: Doplnit automatickou identifikací aplikace.
rq.Request.AppInfo.AppModule.version = this.Version.ToString();
rq.Request.vOKOid = "LPI_GPL01A";
rq.Request.TimeStamp.type = CiselnikPlodin.TimeStampType.@base;
rq.Request.TimeStamp.Value = DateTime.Now;
rq.Request.RequestHeader.RequestID = "Označení dotazu";
rq.Request.RequestHeader.Subject.subjectID = "**********";
rq.Request.RequestHeader.Subject.Value = "Moje farma";
rq.Request.RequestContent.Item.GETDATA = false;
CiselnikPlodin.processResponse rp = cp.process(rq);
return rp.Response.ResponseContent.Item.DATZMENYCIS.ToString();
}
Našel jsem, že by to mohlo být chybějícím konfigurákem, ale ten tam mám. Tak už nevím. Děkuji předem, za každou pomoc.