Monday, May 17, 2010

Error: possible soap version mismatch

Sometime you may encounter below mentioned error when you try to access web service in your .net application.

Possible SOAP version mismatch: Envelope namespace http://schemas.xmlsoap.org/wsdl/ was unexpected. Expecting http://schemas.xmlsoap.org/soap/envelope/.


Actually if you are setting URL property in your .net application with wrong web service url than most likely you may get this error. The general mistake is that people assign same url which they used to see the description of web service (e.g. http://localhost/servlet/webservices?ver=1.1?wsdl) to the URL property of the proxy class instead of the web service url(e.g. http://localhost/servlet/webservices?ver=1.1). So assign the web service url and see if you are able to resolve this error.
If still you are not able to resolve this error then make sure the url you are assigning is correct.

Note: - I have noticed that in case web service is developed in .Net and is consumed by a .Net client then assigning description url (e.g. http://localhost/webservices/service.asmx?wsdl) does not generate this error. But if the web service is developed with non .net technology and generates WSDL that is somewhat different from what .Net clients expect then this error will most likely come up in that case try above given solution.

Tuesday, May 11, 2010

Error: A semi colon character was expected. Error processing resource

Very often people encounter this error when they try to open xml file in IE or try to load it in their code. The most common reason for this error is that your xml file may be containing "&" character. Actually IE misunderstands "&" character with some HTML code that starts with "&" and ends with ";" character like-& nbsp ; means non-breaking space and rendered as a white space.

For Example: here is the content of an xml file which will give this error due to "&" character in the url.

< ?xml version="1.0" encoding="utf-8" ? >
<>
<>
< name="WSACCPURL">
<>http://localhost/Test/webservices?ver=1.1&wsdlxml< /value >
< /setting >
< /appSettings >
< /configuration >

So to resolve this error I replaced the "&" character with HTML code phrase "& amp ;"
Note:- Ignore the space between & and ; there should not be any space. Here I had to give space to avoid their special meaning by IE.

Now the updated xml file is:

< ?xml version="1.0" encoding="utf-8" ? >
<>
<>
< name="WSACCPURL">
<>http://localhost/Test/webservices?ver=1.1& amp ;wsdlxml< /value >
< /setting >
< /appSettings >
< /configuration >


Now when this file is opened in IE the & amp ; is rendered as & character.

Thursday, May 6, 2010

Consuming web service in classic ASP application using .Net component

It’s fairly simple to consume web service in your classic ASP application using wrapper component developed in .net world.

So first create a wrapper component that will consume the web service.
Follow below given steps:

1. Open visual studio and create a Class Library project in C#.
2. Name the project WebServiceWrapper and the class as Wrapper.
3. Paste below code in the Wrapper.cs class window.

-----------------------------------------
using System;

namespace WebServiceWrapper
{

public class Wrapper
{

MyWebService.Service1 svr;

public Wrapper()
{
}

public void Initialize(String url)
{
svr=new WebServiceWrapper.MyWebService.Service1();
svr.Url=url;
}

public String URL
{
get{return svr.Url;}
set{svr.Url=value;}
}

public String HelloWorld(String str)
{
return svr.HelloWorld(str);
}

public String HelloWorld(String str, String url)
{
svr=new WebServiceWrapper.MyWebService.Service1();
svr.Url=url;
return svr.HelloWorld(str);
}

}
}
-----------------------------------------

4. Right click on the project and choose Add Web Reference option.
5. In the Add Web Reference window browse your web service and give the web reference name: MyWebService and click on Add Reference button.

Note:- In the above code web service in question(Service1) is hosted on local machine and has a method named HelloWorld that takes string param and return string value but you have to replace this code with your web service name and web method accordingly.

6. Build the solution that will create WebServiceWrapper.dll
7. Now you have to create type library of your .net component and register that to make it available in your VB COM component. For that use following command at VS .Net command prompt window.

regasm.exe < path of WebServiceWrapper.dll > /tlb /codebase

It will create a type library named WebServiceWrapper.tlb at the dll location and register the same as well. Ignore any warning message shown.

You are done with creating your .NET wrapper component. Now time to use it in your VB COM component.
Here I assume that you would have gone through my previous post "How to create ASP application using ASP Object Library" becasue here I will tell you what changes are needed to do in your ASPComp component that you would have created earlier.

So Open your ASPComp project and add following code in the clsASP class.
-----------------------------------------
Public Sub CallWrapper_HelloWorld()

Dim oclient
Dim strg As String
On Error GoTo ErrorHandler
Set oclient = CreateObject("WebServiceWrapper.Wrapper")
oclient.Initialize "http://localhost/WebService1/Service1.asmx?wsdl"

strg = oclient.HelloWorld("Sanjay")
oResponse.Write strg & vbCrLf

Exit Sub

ErrorHandler:

oResponse.Write "Invalid Web Service Request. Please check the Web Service URL: " & Err.Description

End Sub
----------------------------------------
Note:- Replace the web service url with your web servce url.

Now go to Project-> reference menu and add reference of WebServiceWrapper Type Library that you had created earlier by browsing to its location.

Now re-make ASPComp.dll to incorporate new changes in the COM component.

Note:- You will have to re-register the ASPComp.dll

After completing the COM component changes, open your asp page in the notepad and replace the method call with the newly created method.

So your MyASP.asp page will look like:

< %
Set oExample = Server.CreateObject("ASPComp.clsASP")
oExample.CallWrapper_HelloWorld
% >

No time to test user efforts. So browse http://localhost/ASPTest/MyASP.asp in the IE window.

Wednesday, May 5, 2010

How to consume web service in classic ASP application using Soap 3.0

It's fairly simple to consume web service using Microsoft Soap Type Library 3.0 in your classic ASP application.
Here I assume that you would have gone through my previous post "How to create ASP application using ASP Object Library" becasue here I will tell you what changes are needed to do in your ASPComp component that you would have created earlier.

So Open your ASPComp project and add following code in the clsASP class.
-------------------------------------
Public Sub Call_HelloWorld()

Dim oclient
Dim strg As String
On Error GoTo ErrorHandler
Set oclient = CreateObject("MSSOAP.SoapClient30")
oclient.MSSoapInit "http://localhost/WebService1/Service1.asmx?wsdl"

strg = oclient.HelloWorld("Sanjay")
oResponse.Write strg & vbCrLf

Exit Sub

ErrorHandler:

oResponse.Write "Invalid Web Service Request. Please check the Web Service URL: " & Err.Description

End Sub
--------------------------------------
Note:- In the above code web service in question is hosted on local machine and has a method named HelloWorld that takes string param and return string value but you have to replace this code with your web service and web method.

Now go to Project-> reference menu and add reference of Microsoft Soap Type Library 3.0

Generally it is installed with Office 2003 but if its not installed on your machine then you can download it from here and install it on your machine.

Now you will have to re-make ASPComp.dll

Note:- You will have to re-register the ASPComp.dll

After completing the component changes, open your asp page in the notepad and replace the method call with the newly created method.

So your MyASP.asp page will look like:

< %
Set oExample = Server.CreateObject("ASPComp.clsASP")
oExample.Call_HelloWorld
% >

You are done with the changes. So browse http://localhost/ASPTest/MyASP.asp in the IE window.

Reference: http://www.aspfree.com/c/a/VB.NET/Calling-a-Web-Service-using-VB6-with-SOAP-30/1/

How to create ASP application using ASP Object Library

Microsoft ASP Object Library provides five ASP Intrinsic Objects i.e. Request, Response, Server, Session, and Application that can be used in the COM component to develop re-usable code components that can be used in other ASP applications.

Here I am going to show you how you can create ASP application that uses COM component developed in VB that is using ASP object library.

Below are the steps to create very-very simple ASP application.

1. Open the MS Visual Basic 6.0 and create ActiveX DLL project.
2. Rename the project1 as ASPComp and class1 as clsASP.
3. Copy below code in the clsASP class window.

Private oContext As ObjectContext
Private oResponse As Response

Implements ObjectControl

Private Sub ObjectControl_Activate()
Set oContext = GetObjectContext()
Set oResponse = oContext("Response")
End Sub

Private Sub ObjectControl_Deactivate()
Set oContext = Nothing
Set oResponse = Nothing
End Sub

Private Function ObjectControl_CanBePooled() As Boolean
ObjectControl_CanBePooled = False
End Function

Public Sub HelloWorld()
oResponse.Write "Hello World!
" & vbCrLf
End Sub

4. Now open project-> references window from menu and add reference of following items.
Microsoft Active Server Pages Object Library.
COM+ 1.0 Admin Type Library
COM+ Services Type Library


5. Now go to file menu and make the ASPComp.dll

You are done with creating COM component and now you have to create an ASP page that will comsume this component.

So create a folder named ASPTest in the in wwwroot folder and then create an asp page named MyASP.asp in it.

Open this page in notepad and copy following code in it and save it.

< %
Set oExample = Server.CreateObject("ASPComp.clsASP")
oExample.HelloWorld
% >

Now one last thing to be done is to register the component in the COM+ services. You can do it by setting the class's MTSTransactionMode property = 1 - NoTransaction or through steps given below:

1. Open the Component Services Window and right click on the COM+ Applications
2. From the context menu select new->application
3. A Wizard will open, click on next button.
4. Choose Create Empty application and enter the application name - ASPComp, leave other settings as is and click on next button.
5. Again leave the settings as is and click on next button.
6. Click on Finish button.
7. Now you can see ASPComp in the list of COM+ Applications. Double click on it.
8. Now right click on component and choose new->component
9. A wizard will open, click on the next button.
10. Choose the install new component and browse and select the ASPComp.dll and click on open button.
11. Click on Finish button.
12. Now right click on ASPComp and click on start option.

You are done with the development now time to test it.

Open the IE and type following address in the address bar.

http://localhost/ASPTest/MyASP.asp

You should see - "Hello World" on the page.


Reference: http://www.stardeveloper.com/articles/display.html?article=2000041401&page=1