예제 #1
0
        public async Task <List <ServiceIdentifier> > GetServicesAsync(Uri securityServerUri, SubSystemIdentifier client,
                                                                       SubSystemIdentifier source)
        {
            var soapEnvelope = SoapEnvelope.Prepare()
                               .Body(new ListMethodsRequest())
                               .WithHeaders(
                new List <SoapHeader>
            {
                IdHeader.Random,
                UserIdHeader,
                ProtocolVersionHeader.Version40,
                (XRoadClient)client,
                new XRoadService
                {
                    Instance      = source.Instance,
                    MemberClass   = source.MemberClass,
                    MemberCode    = source.MemberCode,
                    SubSystemCode = source.SubSystemCode,
                    ServiceCode   = "listMethods"
                }
            });


            var soapClient = SoapClient.Prepare();
            var envelope   = await soapClient.SendAsync(securityServerUri.ToString(), string.Empty, soapEnvelope);

            soapClient.Dispose();

            envelope.ThrowIfFaulted();
            return(envelope.Body <ListMethodsResponse>().Services.Select(o => (ServiceIdentifier)o).ToList());
        }
예제 #2
0
        public async Task <byte[]> GetWsdlAsync(Uri securityServerUri, SubSystemIdentifier subSystemId,
                                                ServiceIdentifier targetService)
        {
            byte[] wsdlFileBytes = { };

            var client = SoapClient.Prepare()
                         .WithHandler(new DelegatingSoapHandler
            {
                OnHttpResponseAsyncAction = async(soapClient, httpContext, cancellationToken) =>
                {
                    if (httpContext.Response.Content.IsMimeMultipartContent())
                    {
                        var streamProvider =
                            await httpContext.Response.Content.ReadAsMultipartAsync(cancellationToken);
                        var contentCursor = streamProvider.Contents.GetEnumerator();

                        contentCursor.MoveNext();
                        var soapResponse = contentCursor.Current;

                        contentCursor.MoveNext();
                        var wsdlFile = contentCursor.Current;

                        contentCursor.Dispose();

                        wsdlFileBytes = await wsdlFile.ReadAsByteArrayAsync();
                        httpContext.Response.Content = soapResponse;
                    }
                }
            });

            var body = SoapEnvelope.Prepare().Body(new GetWsdlRequest
            {
                ServiceCode    = targetService.ServiceCode,
                ServiceVersion = targetService.ServiceVersion
            }).WithHeaders(new List <SoapHeader>
            {
                IdHeader.Random,
                UserIdHeader,
                ProtocolVersionHeader.Version40,
                (XRoadClient)subSystemId,
                new XRoadService
                {
                    Instance       = targetService.Instance,
                    MemberClass    = targetService.MemberClass,
                    MemberCode     = targetService.MemberCode,
                    SubSystemCode  = targetService.SubSystemCode,
                    ServiceCode    = "getWsdl",
                    ServiceVersion = "v1"
                }
            });

            var result = await client.SendAsync(securityServerUri.ToString(), string.Empty, body);

            client.Dispose();

            result.ThrowIfFaulted();

            return(wsdlFileBytes);
        }
 protected bool Equals(SubSystemIdentifier other)
 {
     return(base.Equals(other) && string.Equals(SubSystemCode, other.SubSystemCode));
 }