Initial commit
This commit is contained in:
Родитель
64314d20bc
Коммит
2691da29b0
Двоичный файл не отображается.
Двоичный файл не отображается.
|
@ -0,0 +1 @@
|
|||
password
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<!-- ACS v2 configuration -->
|
||||
<add key="AccessControlHostName" value="accesscontrol.windows.net"/>
|
||||
<add key="AccessControlNamespace" value="wcfwithacstest"/>
|
||||
|
||||
<!-- Service configuration -->
|
||||
<add key="ServiceAddress" value="http://127.0.0.1/Service1.svc" />
|
||||
<add key="ServiceCertificateFilePath" value="localhost.cer"/>
|
||||
|
||||
<!-- Client configuration -->
|
||||
<add key="ClientCertificateFilePath" value="localhost.pfx"/>
|
||||
<add key="ClientCertificatePassword" value="password"/>
|
||||
|
||||
</appSettings>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
||||
</startup>
|
||||
</configuration>
|
|
@ -0,0 +1,19 @@
|
|||
using System.ServiceModel;
|
||||
using System.ServiceModel.Channels;
|
||||
using Microsoft.IdentityModel.Protocols.WSTrust.Bindings;
|
||||
|
||||
namespace WCFClient
|
||||
{
|
||||
public static class Bindings
|
||||
{
|
||||
public static Binding CreateServiceBinding(string acsCertificateEndpoint)
|
||||
{
|
||||
return new IssuedTokenWSTrustBinding(CreateAcsCertificateBinding(), new EndpointAddress(acsCertificateEndpoint));
|
||||
}
|
||||
|
||||
public static Binding CreateAcsCertificateBinding()
|
||||
{
|
||||
return new CertificateWSTrustBinding(SecurityMode.TransportWithMessageCredential);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
using System;
|
||||
using System.Configuration;
|
||||
using System.Diagnostics;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.ServiceModel;
|
||||
using System.ServiceModel.Channels;
|
||||
using System.ServiceModel.Security;
|
||||
using WCFServiceWebRole;
|
||||
|
||||
namespace WCFClient
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("Enter a string to reverse, then press <ENTER>");
|
||||
int userInputString = Convert.ToInt32(Console.ReadLine());
|
||||
Console.WriteLine();
|
||||
|
||||
string acsUsernameEndpoint = String.Format("https://{0}.{1}/v2/wstrust/13/username", AccessControlNamespace, AccessControlHostName);
|
||||
|
||||
ChannelFactory<IService1> stringServiceFactory = CreateChannelFactory(acsUsernameEndpoint, ServiceAddress);
|
||||
IService1 stringService = stringServiceFactory.CreateChannel();
|
||||
ICommunicationObject channel = (ICommunicationObject)stringService;
|
||||
|
||||
string outputString = stringService.GetData(userInputString);
|
||||
|
||||
Console.WriteLine("Service responded with: " + outputString);
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Press <ENTER> to exit");
|
||||
Console.ReadLine();
|
||||
|
||||
channel.Close();
|
||||
}
|
||||
|
||||
static string AccessControlHostName = ConfigurationManager.AppSettings.Get("AccessControlHostName");
|
||||
static string AccessControlNamespace = ConfigurationManager.AppSettings.Get("AccessControlNamespace");
|
||||
|
||||
static string ServiceAddress = ConfigurationManager.AppSettings.Get("ServiceAddress");
|
||||
static string ServiceCertificateFilePath = ConfigurationManager.AppSettings.Get("ServiceCertificateFilePath");
|
||||
|
||||
static string ClientCertificateFilePath = ConfigurationManager.AppSettings.Get("ClientCertificateFilePath");
|
||||
static string ClientCertificatePassword = ConfigurationManager.AppSettings.Get("ClientCertificatePassword");
|
||||
|
||||
|
||||
private static ChannelFactory<IService1> CreateChannelFactory(string acsEndpoint, string serviceEndpoint)
|
||||
{
|
||||
//
|
||||
// The WCF service endpoint host name may not match the service certificate subject.
|
||||
// By default, the host name is 'localhost' and the certificate subject is 'WcfServiceCertificate'.
|
||||
// Create a DNS Endpoint identity to match WcfServiceCertificate.
|
||||
//
|
||||
EndpointAddress serviceEndpointAddress = new EndpointAddress(new Uri(serviceEndpoint),
|
||||
EndpointIdentity.CreateDnsIdentity(GetServiceCertificateSubjectName()),
|
||||
new AddressHeaderCollection());
|
||||
|
||||
ChannelFactory<IService1> stringServiceFactory = new ChannelFactory<IService1>(Bindings.CreateServiceBinding(acsEndpoint), serviceEndpointAddress);
|
||||
|
||||
// Set the service credentials and disable certificate validation to work with sample certificates
|
||||
stringServiceFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
|
||||
stringServiceFactory.Credentials.ServiceCertificate.DefaultCertificate = GetServiceCertificate();
|
||||
|
||||
// Set the client credentials.
|
||||
stringServiceFactory.Credentials.ClientCertificate.Certificate = GetClientCertificateWithPrivateKey();
|
||||
|
||||
|
||||
return stringServiceFactory;
|
||||
}
|
||||
private static X509Certificate2 GetClientCertificateWithPrivateKey()
|
||||
{
|
||||
return new X509Certificate2(ClientCertificateFilePath, ClientCertificatePassword);
|
||||
}
|
||||
|
||||
private static X509Certificate2 GetServiceCertificate()
|
||||
{
|
||||
return new X509Certificate2(ServiceCertificateFilePath);
|
||||
}
|
||||
|
||||
private static string GetServiceCertificateSubjectName()
|
||||
{
|
||||
const string cnPrefix = "CN=";
|
||||
string subjectFullName = GetServiceCertificate().Subject;
|
||||
Debug.Assert(subjectFullName.StartsWith(cnPrefix));
|
||||
return subjectFullName.Substring(cnPrefix.Length);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("WCFClient")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("WCFClient")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2013")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("03e59cfb-d20b-4858-861e-ad6da6d553be")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,75 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{5DCE62D8-056C-4948-A5B8-927EB722EAFE}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>WCFClient</RootNamespace>
|
||||
<AssemblyName>WCFClient</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.IdentityModel" />
|
||||
<Reference Include="System.ServiceModel" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Bindings.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
<None Include="localhost.cer">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="localhost.pfx">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\WCFServiceWebRole\WCFServiceWebRole.csproj">
|
||||
<Project>{512c53f2-3de1-47eb-ace9-08746f32dace}</Project>
|
||||
<Name>WCFServiceWebRole</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
Двоичный файл не отображается.
Двоичный файл не отображается.
|
@ -0,0 +1,25 @@
|
|||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using Microsoft.WindowsAzure.Diagnostics;
|
||||
using Microsoft.WindowsAzure.ServiceRuntime;
|
||||
|
||||
namespace WCFServiceWebRole
|
||||
{
|
||||
public class AzureLocalStorageTraceListener : XmlWriterTraceListener
|
||||
{
|
||||
public AzureLocalStorageTraceListener()
|
||||
: base(Path.Combine(AzureLocalStorageTraceListener.GetLogDirectory().Path, "WCFServiceWebRole.svclog"))
|
||||
{
|
||||
}
|
||||
|
||||
public static DirectoryConfiguration GetLogDirectory()
|
||||
{
|
||||
DirectoryConfiguration directory = new DirectoryConfiguration();
|
||||
directory.Container = "wad-tracefiles";
|
||||
directory.DirectoryQuotaInMB = 10;
|
||||
directory.Path = RoleEnvironment.GetLocalResource("WCFServiceWebRole.svclog").RootPath;
|
||||
return directory;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
using System.ServiceModel;
|
||||
using System.ServiceModel.Channels;
|
||||
using Microsoft.IdentityModel.Protocols.WSTrust.Bindings;
|
||||
|
||||
namespace WCFServiceWebRole
|
||||
{
|
||||
public static class Bindings
|
||||
{
|
||||
public static Binding CreateServiceBinding(string acsCertificateEndpoint)
|
||||
{
|
||||
return new IssuedTokenWSTrustBinding(CreateAcsCertificateBinding(), new EndpointAddress(acsCertificateEndpoint));
|
||||
}
|
||||
|
||||
public static Binding CreateAcsCertificateBinding()
|
||||
{
|
||||
return new CertificateWSTrustBinding(SecurityMode.TransportWithMessageCredential);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,120 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.ServiceModel;
|
||||
using System.ServiceModel.Security;
|
||||
using System.Web;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using Microsoft.IdentityModel.Tokens.Saml2;
|
||||
|
||||
using Microsoft.IdentityModel.Configuration;
|
||||
using ServiceConfiguration = Microsoft.IdentityModel.Configuration.ServiceConfiguration;
|
||||
|
||||
|
||||
namespace WCFServiceWebRole
|
||||
{
|
||||
public class CustomServiceHost : ServiceHost
|
||||
{
|
||||
static string AccessControlHostName = ConfigurationManager.AppSettings.Get("AccessControlHostName");
|
||||
static string AccessControlNamespace = ConfigurationManager.AppSettings.Get("AccessControlNamespace");
|
||||
static string AccessControlSigningCertificateFilePath = ConfigurationManager.AppSettings.Get("AccessControlSigningCertificateFilePath");
|
||||
static string ServiceAddress = ConfigurationManager.AppSettings.Get("ServiceAddress");
|
||||
static string ServiceCertificateFilePath = ConfigurationManager.AppSettings.Get("ServiceCertificateFilePath");
|
||||
static string ServiceCertificatePassword = ConfigurationManager.AppSettings.Get("ServiceCertificatePassword");
|
||||
|
||||
private static X509Certificate2 GetAcsSigningCertificate()
|
||||
{
|
||||
return new X509Certificate2(AccessControlSigningCertificateFilePath);
|
||||
}
|
||||
|
||||
private static X509Certificate2 GetServiceCertificateWithPrivateKey()
|
||||
{
|
||||
return new X509Certificate2(ServiceCertificateFilePath, ServiceCertificatePassword);
|
||||
}
|
||||
|
||||
public CustomServiceHost(Type serviceType, params Uri[] baseAddresses)
|
||||
: base(serviceType, baseAddresses)
|
||||
{
|
||||
|
||||
string acsUsernameEndpoint = String.Format("https://{0}.{1}/v2/wstrust/13/username", AccessControlNamespace, AccessControlHostName);
|
||||
|
||||
ServiceHost rpHost = new ServiceHost(typeof(Service1));
|
||||
|
||||
rpHost.Credentials.ServiceCertificate.Certificate = GetServiceCertificateWithPrivateKey();
|
||||
|
||||
rpHost.AddServiceEndpoint(typeof(IService1),
|
||||
Bindings.CreateServiceBinding(acsUsernameEndpoint),
|
||||
ServiceAddress);
|
||||
|
||||
//
|
||||
// This must be called after all WCF settings are set on the service host so the
|
||||
// Windows Identity Foundation token handlers can pick up the relevant settings.
|
||||
//
|
||||
ServiceConfiguration serviceConfiguration = new ServiceConfiguration();
|
||||
serviceConfiguration.CertificateValidationMode = X509CertificateValidationMode.None;
|
||||
|
||||
// Accept ACS signing certificate as Issuer.
|
||||
serviceConfiguration.IssuerNameRegistry = new X509IssuerNameRegistry(GetAcsSigningCertificate().SubjectName.Name);
|
||||
|
||||
// Add the SAML 2.0 token handler.
|
||||
serviceConfiguration.SecurityTokenHandlers.AddOrReplace(new Saml2SecurityTokenHandler());
|
||||
|
||||
// Add the address of this service to the allowed audiences.
|
||||
serviceConfiguration.SecurityTokenHandlers.Configuration.AudienceRestriction.AllowedAudienceUris.Add(new Uri(ServiceAddress));
|
||||
|
||||
FederatedServiceCredentials.ConfigureServiceHost(rpHost, serviceConfiguration);
|
||||
|
||||
}
|
||||
|
||||
//private static ServiceHost CreateWcfServiceHost()
|
||||
//{
|
||||
// string acsUsernameEndpoint = String.Format("https://{0}.{1}/v2/wstrust/13/username", AccessControlNamespace, AccessControlHostName);
|
||||
|
||||
// ServiceHost rpHost = new ServiceHost(typeof(Service1));
|
||||
|
||||
// rpHost.Credentials.ServiceCertificate.Certificate = GetServiceCertificateWithPrivateKey();
|
||||
|
||||
// rpHost.AddServiceEndpoint(typeof(IService1),
|
||||
// Bindings.CreateServiceBinding(acsUsernameEndpoint),
|
||||
// ServiceAddress);
|
||||
|
||||
// //
|
||||
// // This must be called after all WCF settings are set on the service host so the
|
||||
// // Windows Identity Foundation token handlers can pick up the relevant settings.
|
||||
// //
|
||||
// ServiceConfiguration serviceConfiguration = new ServiceConfiguration();
|
||||
// serviceConfiguration.CertificateValidationMode = X509CertificateValidationMode.None;
|
||||
|
||||
// // Accept ACS signing certificate as Issuer.
|
||||
// serviceConfiguration.IssuerNameRegistry = new X509IssuerNameRegistry(GetAcsSigningCertificate().SubjectName.Name);
|
||||
|
||||
// // Add the SAML 2.0 token handler.
|
||||
// serviceConfiguration.SecurityTokenHandlers.AddOrReplace(new Saml2SecurityTokenHandler());
|
||||
|
||||
// // Add the address of this service to the allowed audiences.
|
||||
// serviceConfiguration.SecurityTokenHandlers.Configuration.AudienceRestriction.AllowedAudienceUris.Add(new Uri(ServiceAddress));
|
||||
|
||||
// FederatedServiceCredentials.ConfigureServiceHost(rpHost, serviceConfiguration);
|
||||
|
||||
// return rpHost;
|
||||
//}
|
||||
|
||||
|
||||
//Overriding ApplyConfiguration() allows us to
|
||||
//alter the ServiceDescription prior to opening
|
||||
//the service host.
|
||||
protected override void ApplyConfiguration()
|
||||
{
|
||||
//First, we call base.ApplyConfiguration()
|
||||
//to read any configuration that was provided for
|
||||
//the service we're hosting. After this call,
|
||||
//this.Description describes the service
|
||||
//as it was configured.
|
||||
base.ApplyConfiguration();
|
||||
|
||||
//(rest of implementation elided for clarity)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.ServiceModel;
|
||||
using System.ServiceModel.Activation;
|
||||
using System.Web;
|
||||
|
||||
namespace WCFServiceWebRole
|
||||
{
|
||||
public class CustomServiceHostFactory : ServiceHostFactory
|
||||
{
|
||||
protected override ServiceHost CreateServiceHost(Type serviceType,
|
||||
Uri[] baseAddresses)
|
||||
{
|
||||
//All the custom factory does is return a new instance
|
||||
//of our custom host class. The bulk of the custom logic should
|
||||
//live in the custom host (as opposed to the factory)
|
||||
//for maximum
|
||||
//reuse value outside of the IIS/WAS hosting environment.
|
||||
return new CustomServiceHost(serviceType, baseAddresses);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
using System.ServiceModel;
|
||||
using System.ServiceModel.Web;
|
||||
using System.Text;
|
||||
|
||||
namespace WCFServiceWebRole
|
||||
{
|
||||
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
|
||||
[ServiceContract]
|
||||
public interface IService1
|
||||
{
|
||||
|
||||
[OperationContract]
|
||||
string GetData(int value);
|
||||
|
||||
[OperationContract]
|
||||
CompositeType GetDataUsingDataContract(CompositeType composite);
|
||||
|
||||
// TODO: Add your service operations here
|
||||
}
|
||||
|
||||
|
||||
// Use a data contract as illustrated in the sample below to add composite types to service operations.
|
||||
[DataContract]
|
||||
public class CompositeType
|
||||
{
|
||||
bool boolValue = true;
|
||||
string stringValue = "Hello ";
|
||||
|
||||
[DataMember]
|
||||
public bool BoolValue
|
||||
{
|
||||
get { return boolValue; }
|
||||
set { boolValue = value; }
|
||||
}
|
||||
|
||||
[DataMember]
|
||||
public string StringValue
|
||||
{
|
||||
get { return stringValue; }
|
||||
set { stringValue = value; }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("WCFServiceWebRole")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("WCFServiceWebRole")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2013")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("95fd7d71-96e6-41dd-b52f-1660293a0302")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Revision and Build Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,4 @@
|
|||
<%@ ServiceHost Language="C#" Debug="true"
|
||||
Service="WCFServiceWebRole.Service1"
|
||||
Factory="WCFServiceWebRole.CustomServiceHostFactory"
|
||||
CodeBehind="Service1.svc.cs" %>
|
|
@ -0,0 +1,33 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
using System.ServiceModel;
|
||||
using System.ServiceModel.Web;
|
||||
using System.Text;
|
||||
|
||||
namespace WCFServiceWebRole
|
||||
{
|
||||
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
|
||||
// NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.
|
||||
public class Service1 : IService1
|
||||
{
|
||||
public string GetData(int value)
|
||||
{
|
||||
return string.Format("You entered: {0}", value);
|
||||
}
|
||||
|
||||
public CompositeType GetDataUsingDataContract(CompositeType composite)
|
||||
{
|
||||
if (composite == null)
|
||||
{
|
||||
throw new ArgumentNullException("composite");
|
||||
}
|
||||
if (composite.BoolValue)
|
||||
{
|
||||
composite.StringValue += "Suffix";
|
||||
}
|
||||
return composite;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,146 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>
|
||||
</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{512C53F2-3DE1-47EB-ACE9-08746F32DACE}</ProjectGuid>
|
||||
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>WCFServiceWebRole</RootNamespace>
|
||||
<AssemblyName>WCFServiceWebRole</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<WcfConfigValidationEnabled>True</WcfConfigValidationEnabled>
|
||||
<UseIISExpress>true</UseIISExpress>
|
||||
<IISExpressSSLPort />
|
||||
<IISExpressAnonymousAuthentication />
|
||||
<IISExpressWindowsAuthentication />
|
||||
<IISExpressUseClassicPipelineMode />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
|
||||
<Reference Include="Microsoft.WindowsAzure.Configuration, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.WindowsAzure.ConfigurationManager.1.8.0.0\lib\net35-full\Microsoft.WindowsAzure.Configuration.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.WindowsAzure.Diagnostics, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.WindowsAzure.ServiceRuntime, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.WindowsAzure.StorageClient, Version=1.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\WindowsAzure.Storage.1.7.0.0\lib\net35-full\Microsoft.WindowsAzure.StorageClient.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Data.Services.Client" />
|
||||
<Reference Include="System.IdentityModel" />
|
||||
<Reference Include="System.ServiceModel.Activation" />
|
||||
<Reference Include="System.Web.DynamicData" />
|
||||
<Reference Include="System.Web.Entity" />
|
||||
<Reference Include="System.Web.ApplicationServices" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.EnterpriseServices" />
|
||||
<Reference Include="System.Runtime.Serialization" />
|
||||
<Reference Include="System.ServiceModel" />
|
||||
<Reference Include="System.ServiceModel.Web" />
|
||||
<Reference Include="System.Web" />
|
||||
<Reference Include="System.Web.Extensions" />
|
||||
<Reference Include="System.Web.Services" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Service1.svc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AzureLocalStorageTraceListener.cs" />
|
||||
<Compile Include="Bindings.cs" />
|
||||
<Compile Include="CustomServiceHost.cs" />
|
||||
<Compile Include="CustomServiceHostFactory.cs" />
|
||||
<Compile Include="Service1.svc.cs">
|
||||
<DependentUpon>Service1.svc</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="IService1.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="WebRole.cs" />
|
||||
<Compile Include="X509IssuerNameRegistry.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="App_Data\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Web.config" />
|
||||
<Content Include="localhost.cer">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="localhost.pfx">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<None Include="Web.Debug.config">
|
||||
<DependentUpon>Web.config</DependentUpon>
|
||||
</None>
|
||||
<None Include="Web.Release.config">
|
||||
<DependentUpon>Web.config</DependentUpon>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
|
||||
<WebProjectProperties>
|
||||
<UseIIS>True</UseIIS>
|
||||
<AutoAssignPort>True</AutoAssignPort>
|
||||
<DevelopmentServerPort>0</DevelopmentServerPort>
|
||||
<DevelopmentServerVPath>/</DevelopmentServerVPath>
|
||||
<IISUrl>http://localhost:64188/</IISUrl>
|
||||
<NTLMAuthentication>False</NTLMAuthentication>
|
||||
<UseCustomServer>False</UseCustomServer>
|
||||
<CustomServerUrl>
|
||||
</CustomServerUrl>
|
||||
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
|
||||
</WebProjectProperties>
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
|
||||
|
||||
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
|
||||
<!--
|
||||
In the example below, the "SetAttributes" transform will change the value of
|
||||
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator
|
||||
finds an attribute "name" that has a value of "MyDB".
|
||||
|
||||
<connectionStrings>
|
||||
<add name="MyDB"
|
||||
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
|
||||
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
|
||||
</connectionStrings>
|
||||
-->
|
||||
<system.web>
|
||||
<!--
|
||||
In the example below, the "Replace" transform will replace the entire
|
||||
<customErrors> section of your web.config file.
|
||||
Note that because there is only one customErrors section under the
|
||||
<system.web> node, there is no need to use the "xdt:Locator" attribute.
|
||||
|
||||
<customErrors defaultRedirect="GenericError.htm"
|
||||
mode="RemoteOnly" xdt:Transform="Replace">
|
||||
<error statusCode="500" redirect="InternalError.htm"/>
|
||||
</customErrors>
|
||||
-->
|
||||
</system.web>
|
||||
</configuration>
|
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
|
||||
|
||||
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
|
||||
<!--
|
||||
In the example below, the "SetAttributes" transform will change the value of
|
||||
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator
|
||||
finds an attribute "name" that has a value of "MyDB".
|
||||
|
||||
<connectionStrings>
|
||||
<add name="MyDB"
|
||||
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
|
||||
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
|
||||
</connectionStrings>
|
||||
-->
|
||||
<system.web>
|
||||
<compilation xdt:Transform="RemoveAttributes(debug)" />
|
||||
<!--
|
||||
In the example below, the "Replace" transform will replace the entire
|
||||
<customErrors> section of your web.config file.
|
||||
Note that because there is only one customErrors section under the
|
||||
<system.web> node, there is no need to use the "xdt:Locator" attribute.
|
||||
|
||||
<customErrors defaultRedirect="GenericError.htm"
|
||||
mode="RemoteOnly" xdt:Transform="Replace">
|
||||
<error statusCode="500" redirect="InternalError.htm"/>
|
||||
</customErrors>
|
||||
-->
|
||||
</system.web>
|
||||
</configuration>
|
|
@ -0,0 +1,71 @@
|
|||
<?xml version="1.0"?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<!-- ACS v2 configuration -->
|
||||
<add key="AccessControlHostName" value="accesscontrol.windows.net"/>
|
||||
<add key="AccessControlNamespace" value="wcfwithacstest"/>
|
||||
<add key="AccessControlSigningCertificateFilePath" value="D:\GitHub\WadeWegner\WCFWithACS\resources\localhost.cer" />
|
||||
|
||||
<!-- Service configuration -->
|
||||
<add key="ServiceAddress" value="http://127.0.0.1/Service1.svc" />
|
||||
<add key="ServiceCertificateFilePath" value="D:\GitHub\WadeWegner\WCFWithACS\resources\localhost.pfx"/>
|
||||
<add key="ServiceCertificatePassword" value="password"/>
|
||||
</appSettings>
|
||||
|
||||
|
||||
<!-- To collect diagnostic traces, uncomment the section below or merge with existing system.diagnostics section.
|
||||
To persist the traces to storage, update the DiagnosticsConnectionString setting with your storage credentials.
|
||||
To avoid performance degradation, remember to disable tracing on production deployments.
|
||||
<system.diagnostics>
|
||||
<sharedListeners>
|
||||
<add name="AzureLocalStorage" type="WCFServiceWebRole.AzureLocalStorageTraceListener, WCFServiceWebRole"/>
|
||||
</sharedListeners>
|
||||
<sources>
|
||||
<source name="System.ServiceModel" switchValue="Verbose, ActivityTracing">
|
||||
<listeners>
|
||||
<add name="AzureLocalStorage"/>
|
||||
</listeners>
|
||||
</source>
|
||||
<source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
|
||||
<listeners>
|
||||
<add name="AzureLocalStorage"/>
|
||||
</listeners>
|
||||
</source>
|
||||
</sources>
|
||||
</system.diagnostics> -->
|
||||
<system.diagnostics>
|
||||
<trace>
|
||||
<listeners>
|
||||
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
|
||||
name="AzureDiagnostics">
|
||||
<filter type="" />
|
||||
</add>
|
||||
</listeners>
|
||||
</trace>
|
||||
</system.diagnostics>
|
||||
<system.web>
|
||||
<compilation debug="true" targetFramework="4.0" />
|
||||
</system.web>
|
||||
<system.serviceModel>
|
||||
<behaviors>
|
||||
<serviceBehaviors>
|
||||
<behavior>
|
||||
<!-- To avoid disclosing metadata information, set the value below to false before deployment -->
|
||||
<serviceMetadata httpGetEnabled="true"/>
|
||||
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
|
||||
<serviceDebug includeExceptionDetailInFaults="false"/>
|
||||
</behavior>
|
||||
</serviceBehaviors>
|
||||
</behaviors>
|
||||
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
|
||||
</system.serviceModel>
|
||||
<system.webServer>
|
||||
<modules runAllManagedModulesForAllRequests="true"/>
|
||||
<!--
|
||||
To browse web app root directory during debugging, set the value below to true.
|
||||
Set to false before deployment to avoid disclosing web app folder information.
|
||||
-->
|
||||
<directoryBrowse enabled="true"/>
|
||||
</system.webServer>
|
||||
|
||||
</configuration>
|
|
@ -0,0 +1,25 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.WindowsAzure;
|
||||
using Microsoft.WindowsAzure.Diagnostics;
|
||||
using Microsoft.WindowsAzure.ServiceRuntime;
|
||||
|
||||
namespace WCFServiceWebRole
|
||||
{
|
||||
public class WebRole : RoleEntryPoint
|
||||
{
|
||||
public override bool OnStart()
|
||||
{
|
||||
// To enable the AzureLocalStorageTraceListner, uncomment relevent section in the web.config
|
||||
DiagnosticMonitorConfiguration diagnosticConfig = DiagnosticMonitor.GetDefaultInitialConfiguration();
|
||||
diagnosticConfig.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);
|
||||
diagnosticConfig.Directories.DataSources.Add(AzureLocalStorageTraceListener.GetLogDirectory());
|
||||
|
||||
// For information on handling configuration changes
|
||||
// see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.
|
||||
|
||||
return base.OnStart();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
using System.Collections.Generic;
|
||||
using System.IdentityModel.Tokens;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using IssuerNameRegistry = Microsoft.IdentityModel.Tokens.IssuerNameRegistry;
|
||||
|
||||
namespace WCFServiceWebRole
|
||||
{
|
||||
/// <summary>
|
||||
/// Implements an IssuerNameRegistry that only recognizes a specific
|
||||
/// set of issuer subject names.
|
||||
/// </summary>
|
||||
class X509IssuerNameRegistry : IssuerNameRegistry
|
||||
{
|
||||
List<string> _trustedSubjectNames = new List<string>();
|
||||
|
||||
/// <summary>
|
||||
/// Constructs an instance of X509IssuerNameRegistry.
|
||||
/// </summary>
|
||||
/// <param name="trustedSubjectNames">The subject names that can be recognized.</param>
|
||||
public X509IssuerNameRegistry(params string[] trustedSubjectNames)
|
||||
{
|
||||
_trustedSubjectNames = new List<string>(trustedSubjectNames);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines what the issuer name will be on claims contained in tokens.
|
||||
/// </summary>
|
||||
/// <param name="securityToken">
|
||||
/// The security token to extract the issuer name from. This token typically signed the
|
||||
/// token containing claims and represents the issuer.
|
||||
/// </param>
|
||||
/// <returns>The issuer name to be put on claims.</returns>
|
||||
public override string GetIssuerName(SecurityToken securityToken)
|
||||
{
|
||||
X509SecurityToken x509Token = securityToken as X509SecurityToken;
|
||||
if (x509Token != null)
|
||||
{
|
||||
//
|
||||
// Check the list of trusted/permissible issuers
|
||||
//
|
||||
if (_trustedSubjectNames.Contains(x509Token.Certificate.SubjectName.Name))
|
||||
{
|
||||
return x509Token.Certificate.SubjectName.Name;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Complain in all other situations.
|
||||
//
|
||||
throw new SecurityTokenException("Untrusted issuer.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Двоичный файл не отображается.
Двоичный файл не отображается.
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.WindowsAzure.ConfigurationManager" version="1.8.0.0" targetFramework="net45" />
|
||||
<package id="WindowsAzure.Storage" version="1.7.0.0" targetFramework="net45" />
|
||||
</packages>
|
|
@ -0,0 +1,32 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2012
|
||||
Project("{CC5FD16D-436D-48AD-A40C-5A424C6E3E79}") = "WindowsAzure", "WindowsAzure\WindowsAzure.ccproj", "{7472C06A-00F6-463E-987A-E35D95D09CA3}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WCFClient", "WCFClient\WCFClient.csproj", "{5DCE62D8-056C-4948-A5B8-927EB722EAFE}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WCFServiceWebRole", "WCFServiceWebRole\WCFServiceWebRole.csproj", "{512C53F2-3DE1-47EB-ACE9-08746F32DACE}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{7472C06A-00F6-463E-987A-E35D95D09CA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7472C06A-00F6-463E-987A-E35D95D09CA3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7472C06A-00F6-463E-987A-E35D95D09CA3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7472C06A-00F6-463E-987A-E35D95D09CA3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5DCE62D8-056C-4948-A5B8-927EB722EAFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5DCE62D8-056C-4948-A5B8-927EB722EAFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5DCE62D8-056C-4948-A5B8-927EB722EAFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5DCE62D8-056C-4948-A5B8-927EB722EAFE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{512C53F2-3DE1-47EB-ACE9-08746F32DACE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{512C53F2-3DE1-47EB-ACE9-08746F32DACE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{512C53F2-3DE1-47EB-ACE9-08746F32DACE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{512C53F2-3DE1-47EB-ACE9-08746F32DACE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ServiceConfiguration serviceName="WindowsAzure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="3" osVersion="*" schemaVersion="2012-10.1.8">
|
||||
<Role name="WCFServiceWebRole">
|
||||
<Instances count="1" />
|
||||
<ConfigurationSettings>
|
||||
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
|
||||
</ConfigurationSettings>
|
||||
</Role>
|
||||
</ServiceConfiguration>
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ServiceConfiguration serviceName="WindowsAzure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="3" osVersion="*" schemaVersion="2012-10.1.8">
|
||||
<Role name="WCFServiceWebRole">
|
||||
<Instances count="1" />
|
||||
<ConfigurationSettings>
|
||||
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
|
||||
</ConfigurationSettings>
|
||||
</Role>
|
||||
</ServiceConfiguration>
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ServiceDefinition name="WindowsAzure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2012-10.1.8">
|
||||
<WebRole name="WCFServiceWebRole" vmsize="Small">
|
||||
<Sites>
|
||||
<Site name="Web">
|
||||
<Bindings>
|
||||
<Binding name="Endpoint1" endpointName="Endpoint1" />
|
||||
</Bindings>
|
||||
</Site>
|
||||
</Sites>
|
||||
<Endpoints>
|
||||
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
|
||||
</Endpoints>
|
||||
<Imports>
|
||||
<Import moduleName="Diagnostics" />
|
||||
</Imports>
|
||||
<LocalResources>
|
||||
<LocalStorage name="WCFServiceWebRole.svclog" sizeInMB="1000" cleanOnRoleRecycle="false" />
|
||||
</LocalResources>
|
||||
</WebRole>
|
||||
</ServiceDefinition>
|
|
@ -0,0 +1,55 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>1.8</ProductVersion>
|
||||
<ProjectGuid>7472c06a-00f6-463e-987a-e35d95d09ca3</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>WindowsAzure</RootNamespace>
|
||||
<AssemblyName>WindowsAzure</AssemblyName>
|
||||
<StartDevelopmentStorage>True</StartDevelopmentStorage>
|
||||
<Name>WindowsAzure</Name>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<!-- Items for the project -->
|
||||
<ItemGroup>
|
||||
<ServiceDefinition Include="ServiceDefinition.csdef" />
|
||||
<ServiceConfiguration Include="ServiceConfiguration.Local.cscfg" />
|
||||
<ServiceConfiguration Include="ServiceConfiguration.Cloud.cscfg" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\WCFServiceWebRole\WCFServiceWebRole.csproj">
|
||||
<Name>WCFServiceWebRole</Name>
|
||||
<Project>{512c53f2-3de1-47eb-ace9-08746f32dace}</Project>
|
||||
<Private>True</Private>
|
||||
<RoleType>Web</RoleType>
|
||||
<RoleName>WCFServiceWebRole</RoleName>
|
||||
<UpdateDiagnosticsConnectionStringOnPublish>True</UpdateDiagnosticsConnectionStringOnPublish>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<!-- Import the target files for this project template -->
|
||||
<PropertyGroup>
|
||||
<VisualStudioVersion Condition=" '$(VisualStudioVersion)' == '' ">10.0</VisualStudioVersion>
|
||||
<CloudExtensionsDir Condition=" '$(CloudExtensionsDir)' == '' ">$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Windows Azure Tools\1.8\</CloudExtensionsDir>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(CloudExtensionsDir)Microsoft.WindowsAzure.targets" />
|
||||
</Project>
|
Загрузка…
Ссылка в новой задаче