By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,857 Members | 1,793 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,857 IT Pros & Developers. It's quick & easy.

Problem with minOccurs="0" in client WSDL

P: n/a
I have created a web service for a client to consume. The element I am
having trouble with is, as described in their WSDL:

<xsd:element minOccurs="0" ref="LocalData" maxOccurs="1" />

<xsd:element name="LocalData">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Y" />
<xsd:enumeration value="N" />
</xsd:restriction base="xsd:string">
</xsd:simpleType>
</xsd:element>

When I created a class around this it created a LocalDataSpecified bool.
This bool needs to be set in order for my web service to properly handle the
object.

The problem is, is that the client isn't so much "consuming" the web service
in a developement environment like VS.NET 2003, but rather just throwing
SOAP messages at it. So when I get the message LocalData might specified
but the "LocalDataSpecified" flag is not getting set so I can't tell how to
handle it. The value defaults to "Y" because it is declared at the top of
the enumeration.

Is there any attributes I need to set or any thing else in general that I am
missing?

Thanks a lot for your help.

Mike R
Nov 23 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
"LocalDataSpecified" is a technique specfic to .net so the serializer
sets the boolean variable to true ONLY if the Localdata element is found
in the incoming message. So if the Specified is false then the element
dint come in.

Mike wrote:
I have created a web service for a client to consume. The element I am
having trouble with is, as described in their WSDL:

<xsd:element minOccurs="0" ref="LocalData" maxOccurs="1" />

<xsd:element name="LocalData">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Y" />
<xsd:enumeration value="N" />
</xsd:restriction base="xsd:string">
</xsd:simpleType>
</xsd:element>

When I created a class around this it created a LocalDataSpecified bool.
This bool needs to be set in order for my web service to properly handle the
object.

The problem is, is that the client isn't so much "consuming" the web service
in a developement environment like VS.NET 2003, but rather just throwing
SOAP messages at it. So when I get the message LocalData might specified
but the "LocalDataSpecified" flag is not getting set so I can't tell how to
handle it. The value defaults to "Y" because it is declared at the top of
the enumeration.

Is there any attributes I need to set or any thing else in general that I am
missing?

Thanks a lot for your help.

Mike R


--
HTH
Regards,
Dilip Krishnan
MCAD, MCSD.net
dkrishnan at geniant dot com
http://www.geniant.com
Nov 23 '05 #2

P: n/a
That is what I assumed happed. But regardless if I set the element or not
the LocalDataSpecified always comes across as false. The only way I have
been able to get LocalDataSpecified = true is by setting it myself in the
program calling the web service.

Mike

"Dilip Krishnan" <dk*******@NOSPAM.geniant.com> wrote in message
news:%2****************@tk2msftngp13.phx.gbl...
"LocalDataSpecified" is a technique specfic to .net so the serializer sets
the boolean variable to true ONLY if the Localdata element is found in the
incoming message. So if the Specified is false then the element dint come
in.

Mike wrote:
I have created a web service for a client to consume. The element I am
having trouble with is, as described in their WSDL:

<xsd:element minOccurs="0" ref="LocalData" maxOccurs="1" />

<xsd:element name="LocalData">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Y" />
<xsd:enumeration value="N" />
</xsd:restriction base="xsd:string">
</xsd:simpleType>
</xsd:element>

When I created a class around this it created a LocalDataSpecified bool.
This bool needs to be set in order for my web service to properly handle
the object.

The problem is, is that the client isn't so much "consuming" the web
service in a developement environment like VS.NET 2003, but rather just
throwing SOAP messages at it. So when I get the message LocalData might
specified but the "LocalDataSpecified" flag is not getting set so I can't
tell how to handle it. The value defaults to "Y" because it is declared
at the top of the enumeration.

Is there any attributes I need to set or any thing else in general that I
am missing?

Thanks a lot for your help.

Mike R


--
HTH
Regards,
Dilip Krishnan
MCAD, MCSD.net
dkrishnan at geniant dot com
http://www.geniant.com

Nov 23 '05 #3

P: n/a
Thanks for the response.

The problem I have here is really the client. They cannot make any changes
to their web service because of their development cycle will push the
project back 3 months. I'm having to back my code into a poorly designed
and poorly written web service.

One work around I was looking at doing was to default LocalDataSpecified to
true then add an 'X' value to the top of the LocalData enum. That way
unless they specify 'Y' or 'N' it will default to 'X' so I know they didn't
choose anything. And since they are just pushed raw XML to my web service
instead of calling it from a development environment, this also should be
transparent to them.

Not the best fix but it is all I've come up with. Any other suggestions on
how I can fix this on my side would be appreciated.

Thanks,

Mike R
"Dan Rogers" <da***@microsoft.com> wrote in message
news:Qv**************@TK2MSFTNGXA02.phx.gbl...
This is a know issue for value types in 1.0 and 1.1 of the .NET
framework.

If I understand you, your service will always send this value. If that is
the case, then you can receive your message and then just access the data.
The Specified flag tells you if the data was sent - it is to prevent you
from reading data that is not initialized by the sender.

If you want to make this work as is, and get specified working, make it an
attribute on the service interface. This gets around the known issue.

--------------------
From: "Mike" <mr********@NOSPAMATALLcalibrus.com>
Subject: Problem with minOccurs="0" in client WSDL
Date: Mon, 28 Feb 2005 18:39:14 -0700
Lines: 33
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.2180
X-RFC2646: Format=Flowed; Original
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180
Message-ID: <#c**************@TK2MSFTNGP12.phx.gbl>
Newsgroups:

microsoft.public.dotnet.framework.aspnet.webservic es,microsoft.public.dotnet
framework.webservices
NNTP-Posting-Host: 206-169-51-163.gen.twtelecom.net 206.169.51.163
Path:

TK2MSFTNGXA02.phx.gbl!TK2MSFTNGXA01.phx.gbl!TK2MSF TNGP08.phx.gbl!TK2MSFTNGP1
2.phx.gbl
Xref: TK2MSFTNGXA02.phx.gbl

microsoft.public.dotnet.framework.webservices:9491
microsoft.public.dotnet.framework.aspnet.webservic es:28340
X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webservic es

I have created a web service for a client to consume. The element I am
having trouble with is, as described in their WSDL:

<xsd:element minOccurs="0" ref="LocalData" maxOccurs="1" />

<xsd:element name="LocalData">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Y" />
<xsd:enumeration value="N" />
</xsd:restriction base="xsd:string">
</xsd:simpleType>
</xsd:element>

When I created a class around this it created a LocalDataSpecified bool.
This bool needs to be set in order for my web service to properly handle

the
object.

The problem is, is that the client isn't so much "consuming" the web

service
in a developement environment like VS.NET 2003, but rather just throwing
SOAP messages at it. So when I get the message LocalData might specified
but the "LocalDataSpecified" flag is not getting set so I can't tell how

to
handle it. The value defaults to "Y" because it is declared at the top of
the enumeration.

Is there any attributes I need to set or any thing else in general that I

am
missing?

Thanks a lot for your help.

Mike R

Nov 23 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.