Simulate a web service from wsdl file - c#

I'm writing a program that interacts from with a SOAP web service. I have a wsdl file for the interface but I have no access to a server to test my program.
Is there some tool where I can load in the wsdl and it simulates the service? I just need to return valid looking data.
I can test the majority of my code my mocking the service interface, but I need to test the actual interface code as I've just had to change that with an updated wsdl file.

SoapUI can do it. It will run a local mock server.
Pretty easy to set up, just give it your WSDL, a bit of configuration, and away you go.

Related

Consuming wcf service in coldfusion without generating proxy

We are consuming a WCF service using coldfusion. the wcf service does not expose metadata endpoint instead they share service contracts in dll and svcutil.exe generated proxy class.
Now, how can i consume the wcf service in coldfusion without generating proxy.? i see .net client can access that way by creating channel factory as given in the following url:
http://www.c-sharpcorner.com/UploadFile/dhananjaycoder/accessing-wcf-service-without-creating-proxy/
i researched adobe help page:
http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-78b4.html
but there is no clue.
what possibilities i have to consume the service?
I don't understand the question. Let me see if I can figure this out:
No proxy would be involved unless you specify one. The client computer will invoke and consume the web service on the server without anything inbetween. It's a standard HTTP call.
You say you are connecting to svcutil.exe, a c# utility. So you seem to mean you have an additional layer between the two CF applications, correct? So svcutil.exe is acting as the "proxy"?

What does "Add Service Reference" really do?

Forgive me if the question is incoherent.
I find WCF really complicated. Moreover, different ways to do the same thing make a beginner even more befuddled, like hard-code a host vs config file, or hard-code a client vs add service reference. (Am I feeling right?)
I think it would be helpful to try to go through the process with code in a primitive way. No service reference, no config file.
Maybe I can put it this way: If the service is running on another machine (or my machine pretending another machine), what are the minimum things it has to provide beside an address for some one to consume it?
And how can I consume it with code?
Add Service Reference parses the WSDL of the service to import the service contract, and potentially any referenced domain types, into the client's representation (in this case, C#). It generates a proxy which exposes a C# interface that represents the service contract. The proxy is a namespace and set of classes with methods to call each service method for the particular endpoint.
In short it takes service contract metadata and reifies it to C#.
You can also manually generate the proxy with 'svcutil.exe'
svcutil http://server.com/FooService/FooService.svc /out:FooProxy.cs
Or to include generation of the app.config as well
svcutil http://server.com/FooService /out:FooProxy.cs /config:App.config
Visual Studio "Add Service Reference" does that for you, plus adds the new files to your project.

Translate SoapUi Project to Equivalent DotNet WCF Client Code/Configuration

I have been given a "working" SoapUi 4.0.1 project that accesses an existing 3rd party service. The project has two xml requests that I can run to see, in SoapUi , a "found" and a "not found" response.
Along with the project is a wsdl file a couple of certificate files (for message security) and a bunch of xml schemas.
I've been told to implement a c# client that uses the service based on the "documentation" provided by the above.
I'm not experienced in the intricacies of WCF configuration nor SoapUi. There, at least, there seems to be a mismatch between the terminology SoapUi uses and that I see in the WCF configuration tool.
I'm looking for advice, hints, pointers on duplicating the SoapUi calls in my .NET code, perhaps a terminology mapping between the two tools would be a good start.
First you need to create a service proxy using the right-click "Add Service Reference" in Visual Studio or by running the SVCUTIL.EXE tool from a VS command-line. This will provide you with both a basic configuration file as well as a client implementation. All you need to do this is the actual metadata files (WSDL+XSD) or a URL to a hosted version of it.
It is not clear weather the SoapUI project you have makes client requests to the actual service or if it uses the built-in MockService feature where SoapUI hosts a 'fake' service instance. Either way the MockService feature can be your best friend doing WCF development.
If you are using the SoapUI MockService feature and do not have the original WSDL or access to it you can then use the metadata exposed by the MockService. One way of finding the link to the WSDL is by clicking the link button:
Copy the URL you get from there and generate the proxy from a Visual Studio command-prompt:
svcutil.exe http://localhost:8088/mockKramerServiceSoap?WSDL
SoapUI has one really great feature when trying to replicate SOAP calls in WCF. You can examine requests coming into the MockService from the .NET proxy and compare them with the calls made from SoapUI.
Hopefully this helped you getting started.

WCF generate the wsdl was different with the original wsdl which was provided to create WCF Service?

I got a original wsdl file from my boss and asked me to create a Dummy Web Service based on it. And then create a client to test it by using the new wsdl file which is generated from Dummy Web Service and it need to be exactly the same as the original wsdl. Unfortunately, I found that the new wsdl which was generated by the Dummy Web Service was different with the original one. Anyone could tell me why? How to get the same wsdl as the original one? Thanks!
What I did for this task:
SvcUtil.exe /sc original.wsdl --> to get the C# service class and implement the concrete class for it (dummy web service)
svcutil /t:metadata 'http://localhost/myservice/test.svc?singlewsdl' --> to get the new WSDL from the running dummy web service, but it will be different from the original one
WSDLImp.exe to create the proxy class of Delphi client (test client)
That is always going to be the case. You are comparing two different WSDLs. One is a Virtual WSDL whared with your clients and used to generate a service with SvcUtil. Once you deploy the web-service, and take a look at the WSDL it shares, you now have a Concrete WSDL.
It is best practice for you to test your new service by making a service call based on the Virtual WSDL as this is the WSDL you are likely to share among your clients. SoaupUI is capable of generating and executing tests base on your Virtual WSDL.

Testing a web service wrapper

I have an assembly which wraps the functionality of an external live web service.
How do I go about testing this web service effectively. Should I create a stub of the web service or should I write tests that send and receive live data to the web service?
The problem I have with the second approach is that if I send and expect real data from the web service then I can't assert the results each time as they might change!
If the wrapper only forwards the calls to the web services with no conditional logic at all, there’s no point in creating tests against it that don’t go through the real web service. In this case you should create one test for each operation which should only test the ability to reach the web service and come back without unexpected errors. The data returned really don’t matter. This is an integration test between your wrapper and the web service.
If your wrapper includes conditional logic, then it may be a good idea to create tests that exercise all the paths. It’ll be easier to test these cases if you do not depend on the real web service.
For testing the client code (the code that calls the wrapper), you should stub the wrapper or stub the web service. This will give you the control you need to guarantee the client always receives the same output given the same input.

Categories