Code:
/ DotNET / DotNET / 8.0 / untmp / Orcas / RTM / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- NameSpaceEvent.cs
- StylusDownEventArgs.cs
- Formatter.cs
- TextPointerBase.cs
- DynamicRenderer.cs
- EmbeddedMailObjectCollectionEditor.cs
- HttpHandlerAction.cs
- InkCanvasInnerCanvas.cs
- DataContractJsonSerializer.cs
- formatstringdialog.cs
- JsonWriterDelegator.cs
- GuidelineSet.cs
- HttpModuleCollection.cs
- FixedSOMLineCollection.cs
- TextStore.cs
- UseManagedPresentationElement.cs
- BinaryNode.cs
- WebControlAdapter.cs
- Composition.cs
- ZipIOExtraFieldZip64Element.cs
- AssemblyLoader.cs
- WebPartAddingEventArgs.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- TextEditorCopyPaste.cs
- ByteAnimationBase.cs
- WebPartCancelEventArgs.cs
- HtmlGenericControl.cs
- ResourceAssociationSet.cs
- ProxySimple.cs
- FontResourceCache.cs
- ToolboxDataAttribute.cs
- WebEventTraceProvider.cs
- FirewallWrapper.cs
- ListViewGroup.cs
- WebException.cs
- PrintPageEvent.cs
- TrackBarRenderer.cs
- EastAsianLunisolarCalendar.cs
- WeakReferenceEnumerator.cs
- CompressedStack.cs
- Scene3D.cs
- DataSet.cs
- Listen.cs
- BorderSidesEditor.cs
- Win32.cs
- SelectingProviderEventArgs.cs
- Baml2006KeyRecord.cs
- CardSpaceSelector.cs
- ObjectListCommandsPage.cs
- ExtendedProperty.cs
- SizeLimitedCache.cs
- WindowsGraphicsCacheManager.cs
- OrthographicCamera.cs
- DecimalConstantAttribute.cs
- TypeResolver.cs
- Convert.cs
- MediaCommands.cs
- Exception.cs
- LogStream.cs
- SoapSchemaExporter.cs
- BulletedListEventArgs.cs
- CustomAttributeBuilder.cs
- StructuredTypeEmitter.cs
- QuadraticBezierSegment.cs
- DataGridTable.cs
- DataGridViewColumnCollection.cs
- VirtualPathProvider.cs
- LinqToSqlWrapper.cs
- ListBindableAttribute.cs
- RegexRunner.cs
- AlternateView.cs
- HttpModulesSection.cs
- SqlDataRecord.cs
- List.cs
- DockingAttribute.cs
- Quad.cs
- DataSourceProvider.cs
- OrderByBuilder.cs
- SafeLocalMemHandle.cs
- SQLGuidStorage.cs
- ProfileBuildProvider.cs
- RemoteWebConfigurationHostServer.cs
- DetailsViewDeleteEventArgs.cs
- ModelChangedEventArgsImpl.cs
- CompositeControlDesigner.cs
- ArcSegment.cs
- InvalidWMPVersionException.cs
- MobileContainerDesigner.cs
- EventMappingSettingsCollection.cs
- GradientStopCollection.cs
- InputLanguageProfileNotifySink.cs
- PersonalizationDictionary.cs
- UnionCodeGroup.cs
- Tuple.cs
- ChameleonKey.cs
- SkinBuilder.cs
- OletxEnlistment.cs
- SHA512Managed.cs
- HtmlTableCellCollection.cs
- NestedContainer.cs