Sharepoint学习笔记—Site Definition系列--9、如何在Site Definition中整合Bing Map

  这里我们将会在Site Definition中创建一个Visual Web Part,然后在这个Web Part中呈递出Bing Map的内容。所以涉及的内容如下
   1、在Site Definition中引入Web Part

   2、在Site Definition中引入User Control

   3、在Site Definition中添加对 Bing 地图服务的引用(Web Services)

   4、在Default页面上引用 Web Part

   实践本文的前提是你需要创建一个Bing Map账户,创建帐户请点击此处

   然后通过Bing Maps账户管理中心创建Key,使用Windows Live ID登录账户管理中心就可以完成创建,每个Live ID可以创建5个开发Key。

   有了开发Key接着来就可以进行基于Bing Maps相关的功能开发了。 这些Key的用途在于让Bing Map来鉴别你的应用程序。更多BingMap的内容请参考

   这里直接进入我们的操作步骤,我们将基于Sharepoint学习笔记—Site Definition系列--如何在Site Definition中引入Master Page (2、Css等资源的引入)的项目来继续我们的开发,所以本文不再另建项目。

   首先,我们需要在此项目中引入Visual Web Part。这个Visual Web Part还包含另一个用户控件,此用户控件用于导航操控我们的地图。
   所以请先在项目中新添加一个Visual Web Part,命名为BingMapWebPart,如下图:

Sharepoint学习笔记—Site Definition系列--9、如何在Site Definition中整合Bing Map_第1张图片  
   点击Add按钮后系统会给我们自动创建好Visual Web Part的框架,

   并且还会新添加一个Feature名为Feature2,把我们的BingMapWebPart放到这个Feature2中:


Sharepoint学习笔记—Site Definition系列--9、如何在Site Definition中整合Bing Map_第2张图片  

  我们先不管新增控件的代码,先继续加入所需的其它内容,这里再添加一个用户自定义控件BingMapNav.ascx ,它提供了导航按钮以便于我们对地图进行zoom in/out, pane left/right/top/bottom等操作。
  添加方法是先给项目Map一个ControlTemplates目录,再在这个目录下添加一个名为BingMapNav.ascx (下面示意图中是BingMapNavNew,但这里请使用BingMapNav命名) 的用户控件。

Sharepoint学习笔记—Site Definition系列--9、如何在Site Definition中整合Bing Map_第3张图片

 Sharepoint学习笔记—Site Definition系列--9、如何在Site Definition中整合Bing Map_第4张图片


 

Sharepoint学习笔记—Site Definition系列--9、如何在Site Definition中整合Bing Map_第5张图片  
  接下来我们要引入Bing Map的Service,方法是选中项目,点击鼠标右键,在弹出菜单中选择Add Service Reference,如下图

Sharepoint学习笔记—Site Definition系列--9、如何在Site Definition中整合Bing Map_第6张图片

   在设置窗口输入如下地址
  http://dev.virtualearth.net/webservices/v1/geocodeservice/geocodeservice.svc?wsdl
 并作如下设置

 Sharepoint学习笔记—Site Definition系列--9、如何在Site Definition中整合Bing Map_第7张图片

  点击确定,照上面同样的方法添加
http://dev.virtualearth.net/webservices/v1/imageryservice/imageryservice.svc?wsdl
  并命名在NameSpace栏输入ImageryService。

  添加了对WebService的引用后,我们需要添加一个类BingMapHelper,这个类的作用是提供调用Bing Map Service的方法。BingMapHelper.cs 的代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySiteDefinitionTest.GeoCodeService;
using MySiteDefinitionTest.ImageryService;

namespace MySiteDefinitionTest
{
     class BingMapHelper
    {
         //  static string key = "You bing map key here";
         static  string key =  " Your Bing Map Key ";
         #region Helper Methods
         public  static GeocodeResponse GeocodeAddressGeocodeResponse( string address)
        {
            GeocodeRequest geocodeRequest =  new GeocodeRequest();

             //  Set the credentials using a valid Bing Maps key
            geocodeRequest.Credentials =  new MySiteDefinitionTest.GeoCodeService.Credentials();
            geocodeRequest.Credentials.ApplicationId = key;

             //  Set the full address query
            geocodeRequest.Query = address;

             //  Set the options to only return high confidence results 
            ConfidenceFilter[] filters =  new ConfidenceFilter[ 1];
            filters[ 0] =  new ConfidenceFilter();
            filters[ 0].MinimumConfidence = MySiteDefinitionTest.GeoCodeService.Confidence.High;

             //  Add the filters to the options
            GeocodeOptions geocodeOptions =  new GeocodeOptions();
            geocodeOptions.Filters = filters;
            geocodeRequest.Options = geocodeOptions;

             //  Make the geocode request
            GeocodeServiceClient geocodeService =  new GeocodeServiceClient( " BasicHttpBinding_IGeocodeService ");
            GeocodeResponse geocodeResponse = geocodeService.Geocode(geocodeRequest);
             return geocodeResponse;
        }

         public  static  string GetImagery( double latitude,  double longititude,  int zoom)
        {
            MapUriRequest mapUriRequest =  new MapUriRequest();

             //  Set credentials using a valid Bing Maps key
            mapUriRequest.Credentials =  new MySiteDefinitionTest.ImageryService.Credentials();
            mapUriRequest.Credentials.ApplicationId = key;

             //  Set the location of the requested image
            mapUriRequest.Center =  new MySiteDefinitionTest.ImageryService.Location();

            mapUriRequest.Center.Latitude = latitude;
            mapUriRequest.Center.Longitude = longititude;

             //  Set the map style and zoom level
            MapUriOptions mapUriOptions =  new MapUriOptions();
            mapUriOptions.Style = MapStyle.AerialWithLabels;
            mapUriOptions.ZoomLevel = zoom;

             //  Set the size of the requested image in pixels
            mapUriOptions.ImageSize =  new MySiteDefinitionTest.ImageryService.SizeOfint();
            mapUriOptions.ImageSize.Height =  400;
            mapUriOptions.ImageSize.Width =  500;

            mapUriRequest.Options = mapUriOptions;

             // Make the request and return the URI
            ImageryServiceClient imageryService =  new ImageryServiceClient( " BasicHttpBinding_IImageryService ");
            MapUriResponse mapUriResponse = imageryService.GetMapUri(mapUriRequest);
             return mapUriResponse.Uri;
        }
         #endregion Helper Methods
    }
}

    此时我们的项目如下图:

 Sharepoint学习笔记—Site Definition系列--9、如何在Site Definition中整合Bing Map_第8张图片  

    接下来我们要回到前面创建的创建的Visual Web Part与 User Control来修改其相应的代码。
    首先是UserControl的代码
    BingMapNav.ascx界面定义代码如下:

< %@ Assembly  Name ="$SharePoint.Project.AssemblyFullName$"  % >
< %@ Assembly  Name ="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"  % >
< %@ Register  Tagprefix ="SharePoint"  Namespace ="Microsoft.SharePoint.WebControls"  Assembly ="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"  % >
< %@ Register  Tagprefix ="Utilities"  Namespace ="Microsoft.SharePoint.Utilities"  Assembly ="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"  % >
< %@ Register  Tagprefix ="asp"  Namespace ="System.Web.UI"  Assembly ="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"  % >
< %@ Import  Namespace ="Microsoft.SharePoint"  % > 
< %@ Register  Tagprefix ="WebPartPages"  Namespace ="Microsoft.SharePoint.WebPartPages"  Assembly ="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"  % >
< %@ Control  Language ="C#"  AutoEventWireup ="true"  CodeBehind ="BingMapNav.ascx.cs"  Inherits ="MySiteDefinitionTest.ControlTemplates.BingMapNav"  % >
< table >
     < tr >
         < td  colspan ="2" >Zoom
         </ td >
         < td >
             < asp:button  runat ="server"  text ="^"  ID ="btnUp"  onclick ="btnUp_Click"   />
         </ td >
         < td >
             < asp:button  runat ="server"  text ="&gt;"  ID ="btnRight"  onclick ="btnRight_Click"   />
         </ td >
     </ tr >
     < tr >
         < td >
             < asp:button  runat ="server"  text ="-"  ID ="btnZoomOut"  
                onclick
="btnZoomOut_Click"   />
         </ td >
         < td >
             < asp:button  runat ="server"  text ="+"  ID ="btnZoomIn"  onclick ="btnZoomIn_Click"   />
         </ td >
         < td >
             < asp:button  runat ="server"  text ="v"  ID ="btnDown"  onclick ="btnDown_Click"   />
         </ td >
         < td >
             < asp:button  runat ="server"  text ="&lt;"  ID ="btnLeft"  onclick ="btnLeft_Click"   />
         </ td >
     </ tr >
    
</ table >

   BingMapNav.ascx.cs代码内容如下

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace MySiteDefinitionTest.ControlTemplates
{
     public  partial  class BingMapNav : UserControl
    {
         public  event ButtonClickDelegate ZoomInButtonClick;
         public  event ButtonClickDelegate ZoomOutButtonClick;
         public  event ButtonClickDelegate ScrollUpButtonClick;
         public  event ButtonClickDelegate ScrollDownButtonClick;
         public  event ButtonClickDelegate ScrollLeftButtonClick;
         public  event ButtonClickDelegate ScrollRightButtonClick;

         public  delegate  void ButtonClickDelegate();
         public  string Raj;

         protected  void Page_Load( object sender, EventArgs e)
        {
        }

         protected  void btnZoomOut_Click( object sender, EventArgs e)
        {
             if (ZoomOutButtonClick !=  null)
            {
                ZoomOutButtonClick();
            }
             else
            {
                 throw  new Exception( " Nav:ZoomOut event not registered ");
            }
        }

         protected  void btnZoomIn_Click( object sender, EventArgs e)
        {
             if (ZoomInButtonClick !=  null)
            {
                ZoomInButtonClick();
            }
        }

         protected  void btnUp_Click( object sender, EventArgs e)
        {
             if (ScrollUpButtonClick !=  null)
            {
                ScrollUpButtonClick();
            }
        }

         protected  void btnDown_Click( object sender, EventArgs e)
        {
             if (ScrollDownButtonClick !=  null)
            {
                ScrollDownButtonClick();
            }
        }

         protected  void btnRight_Click( object sender, EventArgs e)
        {
             if (ScrollRightButtonClick !=  null)
            {
                ScrollRightButtonClick();
            }
        }

         protected  void btnLeft_Click( object sender, EventArgs e)
        {
             if (ScrollLeftButtonClick !=  null)
            {
                ScrollLeftButtonClick();
            }
        }
    
    }
}


   然后我们再来定义Visual Web Part的相关代码
   BingMapWebPartUserControl.ascx界面代码定义如下

< %@ Assembly  Name ="$SharePoint.Project.AssemblyFullName$"  % >
< %@ Assembly  Name ="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"  % >
< %@ Register  TagPrefix ="SharePoint"  Namespace ="Microsoft.SharePoint.WebControls"
    Assembly
="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"  % >
< %@ Register  TagPrefix ="Utilities"  Namespace ="Microsoft.SharePoint.Utilities"  Assembly ="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"  % >
< %@ Register  TagPrefix ="asp"  Namespace ="System.Web.UI"  Assembly ="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"  % >
< %@ Import  Namespace ="Microsoft.SharePoint"  % >
< %@ Register  TagPrefix ="WebPartPages"  Namespace ="Microsoft.SharePoint.WebPartPages"
    Assembly
="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"  % >
< %@ Control  Language ="C#"  AutoEventWireup ="true"  CodeBehind ="BingMapWebPartUserControl.ascx.cs"
    Inherits
="MySiteDefinitionTest.BingMapWebPart.BingMapWebPartUserControl"  % >
< %@ Register  Src ="~/_controltemplates/BingMapNav.ascx"  TagName ="BingMapNav"  TagPrefix ="uc1"  % >

< asp:UpdatePanel  ID ="UpdatePanel1"  runat ="server" >
     < ContentTemplate >
         < div >
             < table  width ="100%"  style ="height: 500px" >
                 < tr  style ="height: 30px"  valign ="top" >
                     < td  align ="center"  height ="30px" >
                        Enter address
                         < asp:TextBox  runat ="server"  ID ="txtAddress"  ValidationGroup ="BingMapsWP"  Width ="300px" >3600 One Microsoft Way Redmond 98052 </ asp:TextBox >
                         < asp:RequiredFieldValidator  ID ="RequiredFieldValidator1"  runat ="server"  ControlToValidate ="txtAddress"
                            ErrorMessage
="* Required"  ValidationGroup ="BingMapsWP" ></ asp:RequiredFieldValidator >
                     </ td >
                 </ tr >
                 < tr  style ="height: 40px"  valign ="top" >
                     < td  align ="center"  height ="30px" >
                         < asp:Button  ID ="btnGetMap"  runat ="server"  Text ="Get Maps"  ValidationGroup ="BingMapsWP"
                            OnClick
="btnGetMap_Click"   />
                         < br  />
                         < asp:Label  ID ="lblError"  runat ="server"  Text ="Label" ></ asp:Label >
                     </ td >
                 </ tr >
                 < tr >
                     < td  align ="center" >
                         < asp:Image  runat ="server"  ID ="mapImage"  Visible ="False" ></ asp:Image >
                     </ td >
                 </ tr >
                 < tr  style ="height: 30px" >
                     < td  align ="center" >
                         < uc1:BingMapNav  ID ="BingMapNav1"  runat ="server"   />
                     </ td >
                 </ tr >
             </ table >
         </ div >
     </ ContentTemplate >
</ asp:UpdatePanel >

  
 上面代码中,此段代码

< %@ Register  Src ="~/_controltemplates/BingMapNav.ascx"  TagName ="BingMapNav"  TagPrefix ="uc1"  % >

 的作用是在我们的Visual Web Part中引入我们定义的用户自定义控件BingMapNav。

 

 BingMapWebPartUserControl.ascx.cs代码如下:

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

using MySiteDefinitionTest.GeoCodeService;
using MySiteDefinitionTest.ImageryService;
using MySiteDefinitionTest.ControlTemplates;


namespace MySiteDefinitionTest.BingMapWebPart
{
     public  partial  class BingMapWebPartUserControl : UserControl
    {
         const  string longititudeKey =  " longititude ";
         const  string latitudeKey =  " latitude ";
         const  string zoomKey =  " zoom ";

         double longititude;
         double latitude;
         int zoom =  15;

         protected  void Page_Load( object sender, EventArgs e)
        {
            lblError.Visible =  true;
             if (ViewState[longititudeKey] !=  null)
            {
                longititude = ( double)ViewState[longititudeKey];
                latitude = ( double)ViewState[latitudeKey];
                zoom = ( int)ViewState[zoomKey];
            }

             // if (!Page.IsPostBack)
            {
                ((BingMapNav)BingMapNav1).ZoomOutButtonClick +=  new BingMapNav.ButtonClickDelegate(ZoomOut);
                ((BingMapNav)BingMapNav1).ZoomInButtonClick +=  new BingMapNav.ButtonClickDelegate(ZoomIn);
                ((BingMapNav)BingMapNav1).ScrollDownButtonClick +=  new BingMapNav.ButtonClickDelegate(ScrollDown);
                ((BingMapNav)BingMapNav1).ScrollLeftButtonClick +=  new BingMapNav.ButtonClickDelegate(ScrollLeft);
                ((BingMapNav)BingMapNav1).ScrollRightButtonClick +=  new BingMapNav.ButtonClickDelegate(ScrollRight);
                ((BingMapNav)BingMapNav1).ScrollUpButtonClick +=  new BingMapNav.ButtonClickDelegate(ScrollUp);
            }
        }

         protected  void Page_PreRender( object sender, EventArgs e)
        {
            ViewState[longititudeKey] = longititude;
            ViewState[latitudeKey] = latitude;
            ViewState[zoomKey] = zoom;
        }

         protected  void ZoomOut()
        {
            zoom -=  2;
            lblError.Text =  " New Zoom  " + zoom;
            mapImage.ImageUrl = MySiteDefinitionTest.BingMapHelper.GetImagery(latitude, longititude, zoom);
        }

         protected  void ZoomIn()
        {
            zoom +=  2;
            lblError.Text =  " New Zoom  " + zoom;
            mapImage.ImageUrl = BingMapHelper.GetImagery(latitude, longititude, zoom);
        }

         protected  void ScrollDown()
        {
            latitude -=  0.2;
            lblError.Text =  " New latitude  " + latitude;
            mapImage.ImageUrl = BingMapHelper.GetImagery(latitude, longititude, zoom);
        }

         protected  void ScrollLeft()
        {
            longititude -=  0.2;
            lblError.Text =  " New longititude  " + longititude;
            mapImage.ImageUrl = BingMapHelper.GetImagery(latitude, longititude, zoom);
        }

         protected  void ScrollRight()
        {
            longititude +=  0.2;
            lblError.Text =  " New longititude  " + longititude;
            mapImage.ImageUrl = BingMapHelper.GetImagery(latitude, longititude, zoom);
        }

         protected  void ScrollUp()
        {
            latitude +=  0.2;
            lblError.Text =  " New latitude  " + latitude;
            mapImage.ImageUrl = BingMapHelper.GetImagery(latitude, longititude, zoom);
        }

         protected  void btnGetMap_Click( object sender, EventArgs e)
        {
            lblError.Visible =  false;
             try
            {
                 // Get map

                GeocodeResponse resp = BingMapHelper.GeocodeAddressGeocodeResponse(txtAddress.Text);
                latitude = resp.Results[ 0].Locations[ 0].Latitude;
                longititude = resp.Results[ 0].Locations[ 0].Longitude;

                 // Get URI and set image
                mapImage.ImageUrl = BingMapHelper.GetImagery(latitude, longititude, zoom);

                 // Show image
                mapImage.Visible =  true;
            }
             catch (Exception ex)
            {
                lblError.Visible =  true;
                lblError.Text = ex.Message +  " <BR> " + ex.StackTrace;
            }
        }
    }
}

 作完了上述工作后,任务还没结束,我们还需要修改app.config文件以配合Web Service的使用。因此请打开项目内的app.config文件,找到标识的内容并删除 decompressionEnable="true"

Sharepoint学习笔记—Site Definition系列--9、如何在Site Definition中整合Bing Map_第9张图片

app.config的代码内容如下:

<? xml version="1.0" encoding="utf-8"  ?>
< configuration >
     < system.serviceModel >
         < bindings >
             < basicHttpBinding >
                 < binding  name ="BasicHttpBinding_IGeocodeService"  closeTimeout ="00:01:00"
                    openTimeout
="00:01:00"  receiveTimeout ="00:10:00"  sendTimeout ="00:01:00"
                    allowCookies
="false"  bypassProxyOnLocal ="false"  hostNameComparisonMode ="StrongWildcard"
                    maxBufferSize
="65536"  maxBufferPoolSize ="524288"  maxReceivedMessageSize ="65536"
                    messageEncoding
="Text"  textEncoding ="utf-8"  transferMode ="Buffered"
                    useDefaultWebProxy
="true" >
                     < readerQuotas  maxDepth ="32"  maxStringContentLength ="8192"  maxArrayLength ="16384"
                        maxBytesPerRead
="4096"  maxNameTableCharCount ="16384"   />
                     < security  mode ="None" >
                         < transport  clientCredentialType ="None"  proxyCredentialType ="None"
                            realm
=""   />
                         < message  clientCredentialType ="UserName"  algorithmSuite ="Default"   />
                     </ security >
                 </ binding >

                 < binding  name ="BasicHttpBinding_IImageryService"  closeTimeout ="00:01:00"
                    openTimeout
="00:01:00"  receiveTimeout ="00:10:00"  sendTimeout ="00:01:00"
                    allowCookies
="false"  bypassProxyOnLocal ="false"  hostNameComparisonMode ="StrongWildcard"
                    maxBufferSize
="65536"  maxBufferPoolSize ="524288"  maxReceivedMessageSize ="65536"
                    messageEncoding
="Text"  textEncoding ="utf-8"  transferMode ="Buffered"
                    useDefaultWebProxy
="true" >
                     < readerQuotas  maxDepth ="32"  maxStringContentLength ="8192"  maxArrayLength ="16384"
                        maxBytesPerRead
="4096"  maxNameTableCharCount ="16384"   />
                     < security  mode ="None" >
                         < transport  clientCredentialType ="None"  proxyCredentialType ="None"
                            realm
=""   />
                         < message  clientCredentialType ="UserName"  algorithmSuite ="Default"   />
                     </ security >
                 </ binding >
             </ basicHttpBinding >
             < customBinding >
                 < binding  name ="CustomBinding_IGeocodeService" >
                     < binaryMessageEncoding  maxReadPoolSize ="64"  maxWritePoolSize ="16"
                        maxSessionSize
="2048" >
                         < readerQuotas  maxDepth ="32"  maxStringContentLength ="8192"  maxArrayLength ="16384"
                            maxBytesPerRead
="4096"  maxNameTableCharCount ="16384"   />
                     </ binaryMessageEncoding >
                     < httpTransport  manualAddressing ="false"  maxBufferPoolSize ="524288"
                        maxReceivedMessageSize
="65536"  allowCookies ="false"  authenticationScheme ="Anonymous"
                        bypassProxyOnLocal
="false"   hostNameComparisonMode ="StrongWildcard"
                        keepAliveEnabled
="true"  maxBufferSize ="65536"  proxyAuthenticationScheme ="Anonymous"
                        realm
=""  transferMode ="Buffered"  unsafeConnectionNtlmAuthentication ="false"
                        useDefaultWebProxy
="true"   />
                 </ binding >
                 < binding  name ="CustomBinding_IImageryService" >
                     < binaryMessageEncoding  maxReadPoolSize ="64"  maxWritePoolSize ="16"
                        maxSessionSize
="2048" >
                         < readerQuotas  maxDepth ="32"  maxStringContentLength ="8192"  maxArrayLength ="16384"
                            maxBytesPerRead
="4096"  maxNameTableCharCount ="16384"   />
                     </ binaryMessageEncoding >
                     < httpTransport  manualAddressing ="false"  maxBufferPoolSize ="524288"
                        maxReceivedMessageSize
="65536"  allowCookies ="false"  authenticationScheme ="Anonymous"
                        bypassProxyOnLocal
="false"   hostNameComparisonMode ="StrongWildcard"
                        keepAliveEnabled
="true"  maxBufferSize ="65536"  proxyAuthenticationScheme ="Anonymous"
                        realm
=""  transferMode ="Buffered"  unsafeConnectionNtlmAuthentication ="false"
                        useDefaultWebProxy
="true"   />
                 </ binding >
             </ customBinding >
         </ bindings >
         < client >
             < endpoint  address ="http://dev.virtualearth.net/webservices/v1/geocodeservice/GeocodeService.svc"
                binding
="basicHttpBinding"  bindingConfiguration ="BasicHttpBinding_IGeocodeService"
                contract
="GeoCodeService.IGeocodeService"  name ="BasicHttpBinding_IGeocodeService"   />
             < endpoint  address ="http://dev.virtualearth.net/webservices/v1/geocodeservice/GeocodeService.svc/binaryHttp"
                binding
="customBinding"  bindingConfiguration ="CustomBinding_IGeocodeService"
                contract
="GeoCodeService.IGeocodeService"  name ="CustomBinding_IGeocodeService"   />
             < endpoint  address ="http://dev.virtualearth.net/webservices/v1/imageryservice/imageryservice.svc"
                binding
="basicHttpBinding"  bindingConfiguration ="BasicHttpBinding_IImageryService"
                contract
="ImageryService.IImageryService"  name ="BasicHttpBinding_IImageryService"   />
             < endpoint  address ="http://dev.virtualearth.net/webservices/v1/imageryservice/imageryservice.svc/binaryHttp"
                binding
="customBinding"  bindingConfiguration ="CustomBinding_IImageryService"
                contract
="ImageryService.IImageryService"  name ="CustomBinding_IImageryService"   />
         </ client >
     </ system.serviceModel >
</ configuration >

然后请打开你测试网站的Web.config文件,把此处app.config的 <system.serviceModel>的内容复制到网站Web.config的对应节内

Sharepoint学习笔记—Site Definition系列--9、如何在Site Definition中整合Bing Map_第10张图片

如果你不把app.config的<system.serviceModel>内容复制到网站的Web.config对应节内,你就会遇到如下的类似报错:

Could not find endpoint element with name 'BasicHttpBinding_IGeocodeService' and contract 'GeoCodeService.IGeocodeService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this name could be found in the client element.
at System.ServiceModel.Description.ConfigLoader.LoadChannelBehaviors(ServiceEndpoint serviceEndpoint, String configurationName) at System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address) at System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress) at System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName) at System.ServiceModel.EndpointTrait`1.CreateSimplexFactory() at System.ServiceModel.EndpointTrait`1.CreateChannelFactory() at System.ServiceModel.ClientBase`1.CreateChannelFactoryRef(EndpointTrait`1 endpointTrait) at System.ServiceModel.ClientBase`1.InitializeChannelFactoryRef() at System.ServiceModel.ClientBase`1..ctor(String endpointConfigurationName) at MySiteDefinitionTest.GeoCodeService.GeocodeServiceClient..ctor(String endpointConfigurationName) at MySiteDefinitionTest.BingMapHelper.GeocodeAddressGeocodeResponse(String address) at MySiteDefinitionTest.BingMapWebPart.BingMapWebPartUserControl.btnGetMap_Click(Object sender, EventArgs e) 

最后,我们需要修改我们的Default.aspx页面的代码,在此页面上引入我们定义的Visual Web Part。代码如下:

< %@ Page  language ="C#"  MasterPageFile ="~masterurl/custom.master"  
     Inherits
="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c"   % >
< %@ Register  Tagprefix ="SharePoint"  Namespace ="Microsoft.SharePoint.WebControls"  Assembly ="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"  % >
< %@ Register  Tagprefix ="Utilities"  Namespace ="Microsoft.SharePoint.Utilities"  Assembly ="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"  % >
< %@ Register  Tagprefix ="asp"  Namespace ="System.Web.UI"  Assembly ="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"  % >
< %@ Register  Tagprefix ="WebPartPages"  Namespace ="Microsoft.SharePoint.WebPartPages"  Assembly ="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"  % >
< %@ Import  Namespace ="Microsoft.SharePoint"  % >
< %@ Import  Namespace ="Microsoft.SharePoint.ApplicationPages"  % >
< %@ Assembly  Name ="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"  % >

< %@ Register   TagPrefix ="MyWebPartControls"  Namespace ="MySiteDefinitionTest.BingMapWebPart"  
  Assembly
="$SharePoint.Project.AssemblyFullName$"  % >


< asp:Content  ContentPlaceHolderId ="PlaceHolderPageTitle"  runat ="server" >
     < SharePoint:ProjectProperty  Property ="Title"  runat ="server" />
</ asp:Content >

< asp:Content  ID ="Content1"  ContentPlaceHolderId ="PlaceHolderMain"  runat ="server" >
     < h1 >
        Welcome to the custom site  MySiteDefinitionTest
         </ br >
         </ br >

          < div >
            < MyWebPartControls:BingMapWebPart   runat ="Server"   />
          </ div >

     </ h1 >
</ asp:Content >

项目图如下:

Sharepoint学习笔记—Site Definition系列--9、如何在Site Definition中整合Bing Map_第11张图片

 

到此,我们的工作已告完成。接下来请Build并部署我们的项目,然后到你的测试网站上通过 Site Action-->New Site来使用我们定义的Site Definition模板创建一个Site,当系统创建好这个新的Site后,就会自动显示此Site的Default页面

效果如下

Sharepoint学习笔记—Site Definition系列--9、如何在Site Definition中整合Bing Map_第12张图片

 

你可能感兴趣的:(SharePoint)