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
- FormViewInsertedEventArgs.cs
- ArrangedElementCollection.cs
- SectionVisual.cs
- QilIterator.cs
- CheckBox.cs
- WebHeaderCollection.cs
- Axis.cs
- StreamGeometry.cs
- BackoffTimeoutHelper.cs
- PostBackOptions.cs
- ZipIOExtraFieldPaddingElement.cs
- DataRelationCollection.cs
- PrivacyNoticeElement.cs
- ResourceSet.cs
- EntityDescriptor.cs
- PrintController.cs
- DiscoveryClientBindingElement.cs
- DisplayInformation.cs
- MasterPageBuildProvider.cs
- ObjectCloneHelper.cs
- FtpWebRequest.cs
- CodeTypeParameterCollection.cs
- GenericEnumConverter.cs
- DataStorage.cs
- RegularExpressionValidator.cs
- QueryStringParameter.cs
- infer.cs
- HttpRequestWrapper.cs
- DataGridBoolColumn.cs
- DrawingGroup.cs
- ControlIdConverter.cs
- RoleBoolean.cs
- ConfigXmlDocument.cs
- DataListItemCollection.cs
- TripleDESCryptoServiceProvider.cs
- TextEditorSelection.cs
- TiffBitmapDecoder.cs
- GraphicsState.cs
- FrameworkElementFactory.cs
- GetLedgerRequest.cs
- VectorConverter.cs
- SoapEnumAttribute.cs
- TransactionScope.cs
- WebPartManagerInternals.cs
- COM2ColorConverter.cs
- Rect3DValueSerializer.cs
- FlowLayoutPanel.cs
- PositiveTimeSpanValidatorAttribute.cs
- ApplicationInterop.cs
- BinaryNode.cs
- ITreeGenerator.cs
- DecoratedNameAttribute.cs
- SqlRecordBuffer.cs
- log.cs
- DbConnectionPoolCounters.cs
- DragCompletedEventArgs.cs
- Decorator.cs
- DataControlFieldCell.cs
- SqlServices.cs
- DataServiceResponse.cs
- WindowsStatic.cs
- TextDecoration.cs
- HttpCapabilitiesBase.cs
- TargetInvocationException.cs
- RecognizerStateChangedEventArgs.cs
- SplineKeyFrames.cs
- FileEnumerator.cs
- BitStream.cs
- DiscoveryClientProtocol.cs
- CompletionBookmark.cs
- CodeMemberField.cs
- MethodCallConverter.cs
- DiscriminatorMap.cs
- XmlRawWriter.cs
- XmlNodeWriter.cs
- DrawingCollection.cs
- TextEditorParagraphs.cs
- StringValidatorAttribute.cs
- BrowserCapabilitiesFactory.cs
- DesignTimeTemplateParser.cs
- WebHostUnsafeNativeMethods.cs
- DbConnectionPool.cs
- PackageRelationshipSelector.cs
- FlowDecisionLabelFeature.cs
- MenuItemStyle.cs
- AppDomainUnloadedException.cs
- EnumerableRowCollectionExtensions.cs
- FactoryId.cs
- ObjectToIdCache.cs
- ListenUriMode.cs
- BitStack.cs
- WebPageTraceListener.cs
- UInt32Storage.cs
- WorkflowIdleBehavior.cs
- StyleCollection.cs
- StateInitialization.cs
- PreviewPrintController.cs
- LinqDataSourceView.cs
- Encoding.cs
- DataObjectSettingDataEventArgs.cs