Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / xsp / System / Web / Extensions / Script / Services / WCFServiceClientProxyGenerator.cs / 1 / WCFServiceClientProxyGenerator.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.Script.Services {
using System;
using System.Globalization;
using System.ServiceModel.Description;
using System.Text;
internal class WCFServiceClientProxyGenerator : ClientProxyGenerator {
const int MaxIdentifierLength = 511;
const string DataContractXsdBaseNamespace = @"http://schemas.datacontract.org/2004/07/";
string _path;
// Similar to proxy generation code in WCF System.Runtime.Serialization.CodeExporter
// to generate CLR namespace from DataContract namespace
private static void AddToNamespace(StringBuilder builder, string fragment) {
if (fragment == null) {
return;
}
bool isStart = true;
for (int i = 0; i < fragment.Length && builder.Length < MaxIdentifierLength; i++) {
char c = fragment[i];
if (IsValid(c)) {
if (isStart && !IsValidStart(c)) {
builder.Append("_");
}
builder.Append(c);
isStart = false;
}
else if ((c == '.' || c == '/' || c == ':') && (builder.Length == 1
|| (builder.Length > 1 && builder[builder.Length - 1] != '.'))) {
builder.Append('.');
isStart = true;
}
}
}
protected override string GetProxyPath() {
return _path;
}
internal static string GetClientProxyScript(Type contractType, string path, bool debugMode) {
ContractDescription contract = ContractDescription.GetContract(contractType);
WebServiceData webServiceData = WebServiceData.GetWebServiceData(contract);
WCFServiceClientProxyGenerator proxyGenerator = new WCFServiceClientProxyGenerator(path, debugMode);
return proxyGenerator.GetClientProxyScript(webServiceData);
}
// Similar to proxy generation code in WCF System.Runtime.Serialization.CodeExporter
// to generate CLR namespace from DataContract namespace
protected override string GetClientTypeNamespace(string ns) {
if (string.IsNullOrEmpty(ns)) {
return String.Empty;
}
Uri uri = null;
StringBuilder builder = new StringBuilder();
if (Uri.TryCreate(ns, UriKind.RelativeOrAbsolute, out uri)) {
if (!uri.IsAbsoluteUri) {
AddToNamespace(builder, uri.OriginalString);
}
else {
string uriString = uri.AbsoluteUri;
if (uriString.StartsWith(DataContractXsdBaseNamespace, StringComparison.Ordinal)) {
AddToNamespace(builder, uriString.Substring(DataContractXsdBaseNamespace.Length));
}
else {
string host = uri.Host;
if (host != null) {
AddToNamespace(builder, host);
}
string path = uri.PathAndQuery;
if (path != null) {
AddToNamespace(builder, path);
}
}
}
}
if (builder.Length == 0) {
return String.Empty;
}
int length = builder.Length;
if (builder[builder.Length - 1] == '.') {
length--;
}
length = Math.Min(MaxIdentifierLength, length);
return builder.ToString(0, length);
}
protected override string GetProxyTypeName(WebServiceData data) {
return GetClientTypeNamespace(data.TypeData.TypeName);
}
// Similar to proxy generation code in WCF System.Runtime.Serialization.CodeExporter
// to generate CLR namespace from DataContract namespace
private static bool IsValid(char c) {
UnicodeCategory uc = Char.GetUnicodeCategory(c);
// each char must be Lu, Ll, Lt, Lm, Lo, Nd, Mn, Mc, Pc
switch (uc) {
case UnicodeCategory.UppercaseLetter: // Lu
case UnicodeCategory.LowercaseLetter: // Ll
case UnicodeCategory.TitlecaseLetter: // Lt
case UnicodeCategory.ModifierLetter: // Lm
case UnicodeCategory.OtherLetter: // Lo
case UnicodeCategory.DecimalDigitNumber: // Nd
case UnicodeCategory.NonSpacingMark: // Mn
case UnicodeCategory.SpacingCombiningMark: // Mc
case UnicodeCategory.ConnectorPunctuation: // Pc
return true;
default:
return false;
}
}
// Similar to proxy generation code in WCF System.Runtime.Serialization.CodeExporter
// to generate CLR namespace from DataContract namespace
private static bool IsValidStart(char c) {
return (Char.GetUnicodeCategory(c) != UnicodeCategory.DecimalDigitNumber);
}
internal WCFServiceClientProxyGenerator(string path, bool debugMode) {
this._path = path;
this._debugMode = debugMode;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.Script.Services {
using System;
using System.Globalization;
using System.ServiceModel.Description;
using System.Text;
internal class WCFServiceClientProxyGenerator : ClientProxyGenerator {
const int MaxIdentifierLength = 511;
const string DataContractXsdBaseNamespace = @"http://schemas.datacontract.org/2004/07/";
string _path;
// Similar to proxy generation code in WCF System.Runtime.Serialization.CodeExporter
// to generate CLR namespace from DataContract namespace
private static void AddToNamespace(StringBuilder builder, string fragment) {
if (fragment == null) {
return;
}
bool isStart = true;
for (int i = 0; i < fragment.Length && builder.Length < MaxIdentifierLength; i++) {
char c = fragment[i];
if (IsValid(c)) {
if (isStart && !IsValidStart(c)) {
builder.Append("_");
}
builder.Append(c);
isStart = false;
}
else if ((c == '.' || c == '/' || c == ':') && (builder.Length == 1
|| (builder.Length > 1 && builder[builder.Length - 1] != '.'))) {
builder.Append('.');
isStart = true;
}
}
}
protected override string GetProxyPath() {
return _path;
}
internal static string GetClientProxyScript(Type contractType, string path, bool debugMode) {
ContractDescription contract = ContractDescription.GetContract(contractType);
WebServiceData webServiceData = WebServiceData.GetWebServiceData(contract);
WCFServiceClientProxyGenerator proxyGenerator = new WCFServiceClientProxyGenerator(path, debugMode);
return proxyGenerator.GetClientProxyScript(webServiceData);
}
// Similar to proxy generation code in WCF System.Runtime.Serialization.CodeExporter
// to generate CLR namespace from DataContract namespace
protected override string GetClientTypeNamespace(string ns) {
if (string.IsNullOrEmpty(ns)) {
return String.Empty;
}
Uri uri = null;
StringBuilder builder = new StringBuilder();
if (Uri.TryCreate(ns, UriKind.RelativeOrAbsolute, out uri)) {
if (!uri.IsAbsoluteUri) {
AddToNamespace(builder, uri.OriginalString);
}
else {
string uriString = uri.AbsoluteUri;
if (uriString.StartsWith(DataContractXsdBaseNamespace, StringComparison.Ordinal)) {
AddToNamespace(builder, uriString.Substring(DataContractXsdBaseNamespace.Length));
}
else {
string host = uri.Host;
if (host != null) {
AddToNamespace(builder, host);
}
string path = uri.PathAndQuery;
if (path != null) {
AddToNamespace(builder, path);
}
}
}
}
if (builder.Length == 0) {
return String.Empty;
}
int length = builder.Length;
if (builder[builder.Length - 1] == '.') {
length--;
}
length = Math.Min(MaxIdentifierLength, length);
return builder.ToString(0, length);
}
protected override string GetProxyTypeName(WebServiceData data) {
return GetClientTypeNamespace(data.TypeData.TypeName);
}
// Similar to proxy generation code in WCF System.Runtime.Serialization.CodeExporter
// to generate CLR namespace from DataContract namespace
private static bool IsValid(char c) {
UnicodeCategory uc = Char.GetUnicodeCategory(c);
// each char must be Lu, Ll, Lt, Lm, Lo, Nd, Mn, Mc, Pc
switch (uc) {
case UnicodeCategory.UppercaseLetter: // Lu
case UnicodeCategory.LowercaseLetter: // Ll
case UnicodeCategory.TitlecaseLetter: // Lt
case UnicodeCategory.ModifierLetter: // Lm
case UnicodeCategory.OtherLetter: // Lo
case UnicodeCategory.DecimalDigitNumber: // Nd
case UnicodeCategory.NonSpacingMark: // Mn
case UnicodeCategory.SpacingCombiningMark: // Mc
case UnicodeCategory.ConnectorPunctuation: // Pc
return true;
default:
return false;
}
}
// Similar to proxy generation code in WCF System.Runtime.Serialization.CodeExporter
// to generate CLR namespace from DataContract namespace
private static bool IsValidStart(char c) {
return (Char.GetUnicodeCategory(c) != UnicodeCategory.DecimalDigitNumber);
}
internal WCFServiceClientProxyGenerator(string path, bool debugMode) {
this._path = path;
this._debugMode = debugMode;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AdapterUtil.cs
- PeerApplicationLaunchInfo.cs
- CodeStatementCollection.cs
- GeometryGroup.cs
- SafeSecurityHelper.cs
- querybuilder.cs
- DeviceSpecificDialogCachedState.cs
- SharedUtils.cs
- Restrictions.cs
- NotConverter.cs
- QueryLifecycle.cs
- Soap12FormatExtensions.cs
- Boolean.cs
- DriveNotFoundException.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- ZipIOLocalFileBlock.cs
- thaishape.cs
- StylusPlugInCollection.cs
- DirectoryLocalQuery.cs
- AsyncPostBackTrigger.cs
- XmlChildEnumerator.cs
- MailHeaderInfo.cs
- TraceProvider.cs
- Int16Animation.cs
- BaseDataBoundControl.cs
- assertwrapper.cs
- UIPropertyMetadata.cs
- WebPartTracker.cs
- ValueTypeFixupInfo.cs
- CodeIdentifiers.cs
- GeometryHitTestParameters.cs
- Point4D.cs
- RuleSetDialog.cs
- GenericTextProperties.cs
- DocumentApplicationJournalEntry.cs
- SmtpSection.cs
- ActiveDocumentEvent.cs
- BevelBitmapEffect.cs
- HttpHandlerActionCollection.cs
- CollectionViewSource.cs
- PageParserFilter.cs
- RectIndependentAnimationStorage.cs
- XmlReader.cs
- RecordsAffectedEventArgs.cs
- CryptoProvider.cs
- ExtensionSimplifierMarkupObject.cs
- Helper.cs
- NumericUpDown.cs
- PackWebRequestFactory.cs
- StandardBindingElement.cs
- ManipulationDevice.cs
- WebPartEditorOkVerb.cs
- SymbolPair.cs
- MostlySingletonList.cs
- Utils.cs
- PageStatePersister.cs
- XPathScanner.cs
- DataSourceSerializationException.cs
- ClientTarget.cs
- Mutex.cs
- PenThread.cs
- AttributeCollection.cs
- SystemIPGlobalProperties.cs
- XmlSerializerAssemblyAttribute.cs
- RuleSettingsCollection.cs
- SHA384CryptoServiceProvider.cs
- Size.cs
- EntityDataSourceContainerNameConverter.cs
- StringBuilder.cs
- ConstraintStruct.cs
- WindowsComboBox.cs
- XmlElementAttribute.cs
- BamlTreeNode.cs
- ListItemConverter.cs
- EmptyCollection.cs
- PageThemeParser.cs
- AuthStoreRoleProvider.cs
- MSAAWinEventWrap.cs
- ParenthesizePropertyNameAttribute.cs
- CodeExpressionCollection.cs
- SoapSchemaImporter.cs
- HttpClientCertificate.cs
- ExtentJoinTreeNode.cs
- MenuItem.cs
- DbModificationClause.cs
- ListViewInsertionMark.cs
- MouseActionValueSerializer.cs
- ServiceHttpModule.cs
- PriorityRange.cs
- ButtonFlatAdapter.cs
- TypeUnloadedException.cs
- BindingExpressionBase.cs
- InboundActivityHelper.cs
- ObjectToIdCache.cs
- ServiceSecurityAuditElement.cs
- Literal.cs
- State.cs
- UpdateExpressionVisitor.cs
- Cursors.cs
- XmlSchemaType.cs