Here's my first attempt at DIME (code below signature). I'ts basically
straight out of Microsoft's online sample:
For some reason, the statement
respContext.Attachments.Add(dimeAttach);
trips the following error:
Object reference not set to an instance of an object.
I've seen some of the solutions to this problem but they don't seem to
apply. I've gone to Project | Right Click | WSE 2.0 | General and confirmed
that both Enable this project for Web Service Enhancements and Enable
Microsoft Web Service Enhancement SOAP Extension are checked. (Actually, I
did not set these explicitly. I simply added a reference to
Microsoft.Web.Services2 from C:\Program Files\Microsoft
WSE\v2.0\Microsoft.Web.Services2.dll. Subsequently when diagnosing this
problem, I came across this dialog and saw that these options were both
enabled.
Inspiration! A minimum of debugging shows that immediately after executing
SoapContext respContext = ResponseSoapContext.Current;
respContext shows up as <undefined value>
I'm testing this function through the default Web Page which is provided as
a test for Web Services. Can DIME be tested via a Browser request? Or do I
actually have to build a software client to test this?
Thanks for any help you can provide!
- Joe Geretz -
[WebMethod]
public int DropDIMEOnMe(string FileSpec)
{
SoapContext respContext = ResponseSoapContext.Current;
DimeAttachment dimeAttach = new DimeAttachment("file/unknown",
TypeFormat.MediaType, FileSpec);
respContext.Attachments.Add(dimeAttach);
return respContext.Attachments.Count;
}
It was a nice thought, but no dice.
> Inspiration! A minimum of debugging shows that immediately after executing
>
[quoted text clipped - 5 lines]
> as a test for Web Services. Can DIME be tested via a Browser request? Or
> do I actually have to build a software client to test this?
I built a software client to test this. When stepping through this line of
code in the IDE
SoapContext respContext = ResponseSoapContext.Current;
ResponseSoapContext.Current evaluates to <undefined value>. Naturally, this
value is passed along to respContext.
Obviously, I'm not going to get very far until I can get ahold of a valid
ResponseSoapContext. What am I missing?
Thanks for your help!
- Joe Geretz -
> Here's my first attempt at DIME (code below signature). I'ts basically
> straight out of Microsoft's online sample:
[quoted text clipped - 40 lines]
> return respContext.Attachments.Count;
> }
Joseph Geretz - 01 Sep 2005 21:53 GMT
Maybe something wrong with my Web.Config file (included below)? For some
reason the ASP.NET runtime isn't providing my Web Service with a
ResponseSoapContext reference. Why not?
Thanks for your help,
- Joe Geretz -
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="microsoft.web.services2"
type="Microsoft.Web.Services2.Configuration.WebServicesConfiguration,
Microsoft.Web.Services2, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" />
</configSections>
<system.web>
<webServices>
<soapExtensionTypes>
<add type="Microsoft.Web.Services2.WebServicesExtension,
Microsoft.Web.Services2, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" priority="1" group="0" />
</soapExtensionTypes>
</webServices>
</system.web>
<microsoft.web.services2>
<diagnostics>
<detailedErrors enabled="true" />
</diagnostics>
</microsoft.web.services2>
<compilation defaultLanguage="c#" debug="true" />
<customErrors mode="RemoteOnly" />
<authentication mode="Windows" />
<identity impersonate="true" userName="" password="" />
<authorization>
<allow users="*" />
</authorization>
<trace enabled="false" requestLimit="10" pageOutput="false"
traceMode="SortByTime" localOnly="true" />
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false" timeout="20" />
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</configuration>
> It was a nice thought, but no dice.
>
[quoted text clipped - 69 lines]
>> return respContext.Attachments.Count;
>> }
Antonio Dias - 31 Oct 2005 11:11 GMT
> It was a nice thought, but no dice.
>
[quoted text clipped - 67 lines]
>> return respContext.Attachments.Count;
>> }
i don't know if this is you're problem, but you have to remember that if
you are sending a file from the Client application you have to use the
RequestSoapContext.Current from the proxy. And on the Web Service you
use the ResponseSoapContext.Current property.
So it would be something like this:
Client:
<code>
WebbService proxy = new WebService();
SoapContext ctx = proxy.RequestSoapContext.Current;
/* build attach here */
ctx.Attachments.Add (attach);
proxy.MethodCall();
</code>
WebService:
<code>
public void MethodCall()
{
SoapContext ctx = RequestSoapContext.Current;
DimeAttachment = ctx.Attachments[0];
...
}
</code>
Another thing is you have to verify in the client if the proxy class
derives from Microsoft.Web.Services2.WebServicesClientProtocol.
Otherwise you wont have access to the SoapContext
I have got this figured out now. Evidently, when you run client and
webservice projects in a signle solution, Visual Studio does not create the
proxy. I removed the webservice project and instead added a reference to the
webservice to the client project; Voila! Visual Studio created the proxy
class for me. Of course, I still had to tweak the proxy class, but getting
the proxy class created was 90% of the solution.
- Joe Geretz -
> Here's my first attempt at DIME (code below signature). I'ts basically
> straight out of Microsoft's online sample:
[quoted text clipped - 40 lines]
> return respContext.Attachments.Count;
> }
> Here's my first attempt at DIME (code below signature). I'ts basically
> straight out of Microsoft's online sample:
[quoted text clipped - 40 lines]
> return respContext.Attachments.Count;
> }
if you test the web service from the browser the ResponseContext is
always null. the best way to test is making a test application. you do
have to build a client.