I’ve been looking at the option for a Publish and Subscribe web service model for a development project which is starting up at work. The research into the Publish and Subscribe model has had me looking at closely at the WS-BaseNotification specification.
To take a closer look at the standard, and what would be involved in implementing this for the project I downloaded the xml schemas (XSD’s) and web service definition language (WSDL) files for the standard. These files I then loaded up into Visual Studio 2010, and that’s when the “fun started”. These files were including (xsd:import) schemas from over the web, and Visual Studio was getting errors doing this. After a quick browse on the internet, it seemed like a common problem, with some complex solutions. So, thinking there must be a better way, I started solving the problem, my way.
Warning 2 Request for the permission of type ‘System.Net.WebPermission, System, Version=22.214.171.124, Culture=neutral, PublicKeyToken=b77a5c561934e089’ failed.
Warning 3 Request for the permission of type ‘System.Security.Permissions.FileIOPermission, mscorlib, Version=126.96.36.199, Culture=neutral, PublicKeyToken=b77a5c561934e089’ failed.
I have found that the simplest way to solve these types of errors is to do the following:
- Download the xsd file being referenced.
- Paste the URL into IE and get the xsd file up in the browser.
- Use File –> Save As. To save a copy of the xsd file into the Visual Studio project directory which you are keeping your source code in.
- Add the xsd file you just downloaded to the project, and open the xml editor for that file.
- Right click the editor tab for file you just downloaded, and select the “Copy Full Path”.
- Then change the xsd:import from:
<xsd:import namespace="http://www.w3.org/2005/08/addressing" schemaLocation="http://www.w3.org/2005/08/addressing/ws-addr.xsd" />
<xsd:import namespace="http://www.w3.org/2005/08/addressing" schemaLocation="file://visual studio 2010/Projects/Project1/DummyShell/ws-addr.xsd" />
- Tip: You have the file location in the clipboard from the “Copy Full Path”, so you only need to swap the \’s to /’s.
- This makes the reference to a local copy of the schema file.
I’ve had situations where Visual Studio still gives the System.Security.Permissions.FileIOPermission exception/error after making this change. Restarting Visual Studio seemed to “clean out” the error and everything was fine after the restart.
Importing schemas into other schemas is a very powerful feature of xml schema language, but a real pain with Visual Studio. I’m not sure why things get so difficult, the schema cache which Visual Studio maintains seems to, in part, cause extra confusion. This approach ignores the schema cache altogether. Although I did “copy” the xml schema (xml.xsd) from the cache, into the project as well (one of the consequential dependencies required it).